当前位置: 首页 > news >正文

springboot使用kafka推送数据到服务端,带认证

遇到的问题

在实际开发过程中,因为推送数据需要用到kafka,为了比较方便与后续其他需求需要使用kafka,所以开发的过程中是设想能写一个工具类,方便后续的使用,但是,测试不带认证的kafka服务端的时候,发送是正常的,但是实际情况是,对方的服务器需要认证,导致遇到连不上对方服务,推送失败的问题,需要找对方确认对方的认证配置信息。并且在查询怎么处理的时候,验证也出现了比较奇葩的情况,那本次文章就简单写遇到的问题和验证结果。

碰到的天坑

1.度的时候,总是说引入了配置文件就完事,其他的配置不需要再配sasl.jaas.config,但是我实际测试下来不行啊。还是得引入配置文件+配置参数设置。
2.第二个基于未来思考的问题是,这个引入的配置文件内容,是否可以多个。据度来度去的结果说是可以的,按顺序会去逐一匹配直到匹配成功,那就是下面配置的KafkaClient配置块是可以多个,就名称不一样就行。但是碍于条件限制,没试过。😀

处理步骤

  1. 加载配置
    度了很多文章,都提到了需要在服务启动的时候引入认证配置文件,设置属性 java.security.auth.login.config,度了一下是有两种方式。
    a). 在服务启动的时候用参数引入,命令如下:
    java -Djava.security.auth.login.config=(具体地址自己填,因为我配置文件是跟test.jar同级目录所以无前缀)kafka_jaas_config.config -jar test.jar
    b). 在代码中去引入,如:(这方式我是没试的)
    System.setProperty(“java.security.auth.login.config”, “kafka_jaas_config.config”);

    c). 配置文件的内容(注意password后面那个该死的分号是要的,配置参数设置的时候也是要的)

    KafkaClient {  org.apache.kafka.common.security.scram.ScramLoginModule required  username="user"  password="123";  
    };
    
  2. 设置认证参数(如果有的话)
    类似要填的参数是:
    security.protocol,sasl.mechanism,sasl.jaas.config(,sasl.username和sasl.password,这两个我看是高版本直接配置据说能认证,不需要sasl.jaas.config,但是低版本是需要sasl.jaas.config,所以建议是可以都配上)
    such as :

props.put("sasl.jaas.config", "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"user\" password=\"123\";");

工具类

package platform.cars.utils;import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;import javax.annotation.PreDestroy;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @Auther: Ms.y*/
@Configuration
public class KafkaUtil {private static final ConcurrentHashMap<String, KafkaTemplate<String, String>> templateCache = new ConcurrentHashMap<>();private Map<String, Object> kafkaProducerConfigs(String bootstrapServers, Map<String, Object> otherConfigs) {Map<String, Object> props = new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);if (otherConfigs != null){otherConfigs.forEach(props::put);}return props;}public KafkaTemplate<String, String> getKafkaTemplate(String bootstrapServers, Map<String, Object> otherConfigs) {return templateCache.computeIfAbsent(bootstrapServers, bs -> createKafkaTemplate(bs, otherConfigs));}private KafkaTemplate<String, String> createKafkaTemplate(String bootstrapServers, Map<String, Object> otherConfigs) {Map<String, Object> configs = kafkaProducerConfigs(bootstrapServers, otherConfigs);ProducerFactory<String, String> producerFactory = new DefaultKafkaProducerFactory<>(configs);return new KafkaTemplate<>(producerFactory);}@PreDestroypublic void destroy() {for (KafkaTemplate<String, String> template : templateCache.values()) {template.destroy();}}
}

怎么用

1.正常的autowired就行
2.自己查配置还有是否需要认证的信息
3.获取template去发送数据
4.处理结果

Map<String,Object> configs = new HashMap<>();
//自己给configs 填值
KafkaTemplate kafkaTemplate = kafkaUtil.getKafkaTemplate("ip:port",configs);
kafkaTemplate.send("topic名称", "消息内容");

废话

我这是因为为了方便加了个缓存队列,存储了kafka已经连过的服务,不需要的话完全可以自己改造去掉这部分。如果有可以精进的问题可以提啊,欢迎挑刺。


http://www.mrgr.cn/news/65559.html

相关文章:

  • k8s 上如何跑 Dolphins 模型
  • 【Vue3】自定义组件及组件间的通信-案例程序及配图版
  • VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
  • Elasticsearch 实战应用详解!
  • 头歌——数据库系统原理(数据高级查询实验1)
  • Selenium的下载及chrome环境搭建
  • php代码审计--常见函数整理
  • SpringBoot启动器
  • unity游戏开发之--人物打怪爆材料--拾进背包的实现思路
  • React系列教程(2)React哲学
  • 开源呼叫中心系统 FreeIPCC:WebRTC 详解
  • ps和top的区别
  • 「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
  • 拯救者y7000p 打开XMP
  • 外包干了5年,技术退步太明显了。。。。。
  • day-78 平方数之和
  • ai常见实验
  • 2024年双11买什么东西划算?2024年双十一必买清单好物大总结
  • 24年10月比亚迪创造了中国车企月度销量的新纪录50万辆
  • 弹簧质点系统求Hessian
  • Chrome与傲游浏览器性能与功能的深度对比
  • MySQL 分库分表
  • 手把手教你轻松掌握~Air780E软件UDP应用示例!快来看!
  • 论负载均衡技术在Web系统中的应用
  • Manjaro Linux安装过程简介
  • 华为HarmonyOS打造开放、合规的广告生态 - 开屏广告