微服务Spring Cloud Stream 支持 RabbitMQ


Spring Cloud Stream 支持 RabbitMQ

Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、分区这三个核心概念。通过使用 Spring Cloud Stream,可以有效简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。
废话不多说,上代码


提示:以下是本篇文章正文内容,下面案例可供参考

配置

// pom依赖
	<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
// springboot参数配置
spring:
  rabbitmq:
    host: xxx.xxx.xxx.xxx
    port: 5672
    username: guest
    password: guest

生产者

配置

这里通过 spring.cloud.stream.bindings.*.destination 的配置,让输入通道和输出通道对应到同一个主题上

spring.cloud.stream.bindings.user-info-output.destination=exch-user-info
spring.cloud.stream.rabbit.bindings.user-info-output.producer.exchangeType=fanout

消息输出通道UserSource.java

public interface UserSource {

  String USER_INFO_OUTPUT = "user-info-output";
  /**
   * 消息发送通道:用户系统配置
   *
   * @return 消息发送通道
   */
  @Output(USER_INFO_OUTPUT)
  MessageChannel userInfoMessageOutput();
} 

消息通知类UserSender .java

@EnableBinding(UserSource.class)
public class UserSender {

  @Resource
  @Output(UserSource.USER_INFO_OUTPUT)
  private MessageChannel userInfoChannel;

  /**
   * 用户系统配置通知
   *
   * @param req 消息体
   * @return {@code true} 消息发送成功
   */
  public boolean userInfo(JSONObject req) {
    log.info("【Send Msg - User Info】 {}", JSON.toJSONString(req));
    return userInfoChannel.send(MessageBuilder.withPayload(req).build());
  }
}

业务类

{
	// 业务代码
	userSender.userInfo(req);
	// 业务代码
}

消费者

配置

这里通过 spring.cloud.stream.bindings.*.destination 的配置,让输入通道和输出通道对应到同一个主题上

spring.cloud.stream.bindings.user-info-input.binder=issue
spring.cloud.stream.bindings.user-info-input.contentType=application/json
spring.cloud.stream.bindings.user-info-input.destination=exch-user-info
spring.cloud.stream.bindings.user-info-inputt.group=group-user-info
spring.cloud.stream.rabbit.bindings.user-info-input.consumer.autoBindDlq=true
spring.cloud.stream.rabbit.bindings.user-info-input.consumer.republishToDlq=true

消息输入通道UserInfoSink .java

public interface UserInfoSink {
  String USER_INFO_INPUT = "user-info-input";

  /**
   * 消息收取通道
   *
   * @return 消息收取通道
   */
  @Input(USER_INFO_INPUT)
  MessageChannel userInfoMessageInput();
}

接收消息

@Service
@EnableBinding(UserInfoSink .class)
public class QueryUserReceiver {

  /**
   * 监听
   *
   * @param payload 消息
   * @return 问题Key
   */
  @StreamListener(UserInfoSink.USER_INFO_INPUT )
  public void receive(JSONObject payload) {
    log.info("【Receive Msg - user info 】\n{}", JSONObject.toJSONString(payload));
    
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值