SpringCloudStream基于阿里云kafka实现消息发送、订阅

基于阿里云kafka的权限认证

本文基于 快速搭建SpringCloudStreamKafka 实现

本文是通过 VPC环境的 SASL 账号授权的方式访问。需要准备授权账号,具体操作请看官网提供的文档。

协议:SASL_PLAINTEXT
SASL接入点:SCRAM-SHA-256

SCRAM-SHA-256 一种在服务端和客户端采用哈希算法对用户名与密码进行身份校验的安全认证机制。消息队列Kafka版使用SCRAM-SHA-256加密算法实现身份校验,比PLAIN机制安全性更高,同样支持不重启实例的情况下动态增加SASL用户。

使用 SCRAM-SHA-256 相对来说比较简单,只需要在配置文件加入一些相关配置即可。具体权限请在阿里云的控制台配置!

先在pom文件导入aliyun sdk坐标

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-sts</artifactId>
            <version>3.0.0</version>
        </dependency>

application.yml 新增配置

# spring cloud stream kafka config
spring:
  cloud:
    stream:
      kafka:
        binder:
          # Kafka的消息中间件服务器 地址
          brokers: ${kafka.bootstrap-servers}
		  # 开启自动分区
          auto-add-partitions: true
  		  # 关闭自动创建 topic
          auto-create-topics: false
          # 新增 kafka acl 认证 配置
          configuration:
            security:
              # 设置协议模式
              protocol: SASL_PLAINTEXT
            sasl:
              # 设置sasl接入机制 
              mechanism: SCRAM-SHA-256
              jaas:
              	# 配置授权的账号密码
                config: org.apache.kafka.common.security.scram.ScramLoginModule required username="用户名" password="密码";
        streams:
          binder:
			# 配置 处理 Binder 中的异常
			#    logAndContinue,    记录 并 继续
			#    logAndFail,   默认  记录 并 失败
			#    sendToDlq;         成功 并 加入死信队列
            deserializationExceptionHandler: sendToDlq
        bindings:
	 	  # 这里就是在 IProcessor 定义的 INPUT
          input:
            consumer:
			  # 是否开启 dlq 队列
              enable-dlq: ${kafka.topic.A-topic.dlq}
			  # 默认开启 启动自平衡模式 可以轮询消费多台服务
              auto-rebalance-enabled: true
			  # 指定 dlq 队列名称 默认为 error.<destination>.<group>
              dlq-name: ${kafka.topic.A-topic.dlq-name}
			  # 是否开启自动提交 默认开启 
              auto-commit-offset: false
      bindings:
        output:
		  # 指定生产 topic 
          destination: ${kafka.topic.A-topic}
		  # 消息转换器 默认 application/json
          content-type: text/plain
          producer:
            partition-key-expression: payload
        input:
		  # 指定消费 topic 
          destination: ${kafka.topic.A-topic}
		  # 消息转换器 默认 application/json
          content-type: text/plain
          # 分组
          group: ${kafka.topic.A-topic.group}
		  # 消费的一些设置参数 如 开启分区、重试次数... 具体看官网提供的文档
          consumer:
            partitioned: true
配置到这里就可以正常使用了

根据kafka配置给到权限!!!权限要给足,要不然会出现报错 或 启动失败。springCloudStream 默认会自动创建 topic 在真正的生产环境是不允许的 所以配置auto-create-topics: false 关闭!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Stream 是基于 Spring Boot 和 Spring Integration 的框架,用于构建消息驱动的微服务应用程序。它提供了一种简单的方式来在应用程序中使用消息中间件,比如 RabbitMQ 和 Kafka。 下面分别介绍 Spring Cloud Stream 如何整合 RabbitMQ 和 Kafka。 ## 整合 RabbitMQ 1. 添加依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency> ``` 2. 创建消息生产者 创建一个消息生产者,可以使用 `@EnableBinding` 注解将其与 RabbitMQ 绑定: ```java @EnableBinding(MessageSource.class) public class RabbitMQProducer { @Autowired private MessageSource<String> messageSource; public void sendMessage(String message) { messageSource.output().send(MessageBuilder.withPayload(message).build()); } } ``` 3. 创建消息消费者 创建一个消息消费者,同样使用 `@EnableBinding` 注解将其与 RabbitMQ 绑定: ```java @EnableBinding(MessageSink.class) public class RabbitMQConsumer { @StreamListener(MessageSink.INPUT) public void receiveMessage(String message) { System.out.println("Received: " + message); } } ``` 4. 配置 RabbitMQ 在 `application.yml` 文件中配置 RabbitMQ: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest ``` ## 整合 Kafka 1. 添加依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 2. 创建消息生产者 创建一个消息生产者,可以使用 `@EnableBinding` 注解将其与 Kafka 绑定: ```java @EnableBinding(MessageSource.class) public class KafkaProducer { @Autowired private MessageSource<String> messageSource; public void sendMessage(String message) { messageSource.output().send(MessageBuilder.withPayload(message).build()); } } ``` 3. 创建消息消费者 创建一个消息消费者,同样使用 `@EnableBinding` 注解将其与 Kafka 绑定: ```java @EnableBinding(MessageSink.class) public class KafkaConsumer { @StreamListener(MessageSink.INPUT) public void receiveMessage(String message) { System.out.println("Received: " + message); } } ``` 4. 配置 Kafka 在 `application.yml` 文件中配置 Kafka: ```yaml spring: kafka: bootstrap-servers: localhost:9092 consumer: group-id: myGroup auto-offset-reset: earliest producer: retries: 0 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值