springCloud 之 spring-cloud-stream 集成消息中间件rabbitmq

  • 1、POM中引入spring-cloud-starter-stream-rabbit
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
  • 2、定义配置文件
spring:
  cloud:
    stream:
      bindings:
        input:  
          destination: order
          content-type: application/json
          default-binder: defaultRabbit
          group: test
        output:      
          destination: order
          content-type: application/json
          default-binder: defaultRabbit
          group: test
        testInput:           
          destination: user
          content-type: application/json
          default-binder: defaultRabbit
          group: test
        testOutput: 
          destination: user
          content-type: application/json
          default-binder: defaultRabbit
          group: test
      binders:
        defaultRabbit:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: localhost
                port: 5672
                username: bys
                password: bys2018
                virtual-host: /
配置说明:

   * 1、binders: 一组rabbitMQ的连接信息;
   * 2、bindings:声明输入和输出通道的接口集合;
   * 3、input、output,stream提供的默认生产者与消费者;
   * 4、destination要绑定的交换机,对应rabbitmq中的Exchanges。
   * 5、group对应rabbitmq中的queue;
  • 3、默认通道实例:

    • 3.1 消息生产实例(绑定stream提供的默认的通道)
      //绑定消息通道,Source是Stream提供的,跟配置文件output关联。
      @EnableBinding(Source.class)
      public class DefaultSendServiceImpl implements IDefaultSendService {
      
          @Autowired
          Source source;
      
          @Override
          public boolean sendMsg(String msg) {
              return source.output().send(MessageBuilder.withPayload(msg).build());
          }
      }
      
    • 3.2 消息消费实例
      //消息接收端,stream给我们提供了Sink,Sink源码里面是绑定input的,跟配置文件的input关联的。
      @Component
      @EnableBinding(value = {Sink.class})
      public class DefaultReceiveServiceImpl implements IDefaultReceiveService {
            
          @StreamListener(Sink.INPUT)
          public void recieve(Object payload){
              System.out.println("默认接收消息" + payload);
          }
      }
      
  • 4、自定义消息通道:

    • 4.1、自定义生产者、消费者通道接口
      public interface MqMessageSource {
      
          String TEST_OUT_PUT = "testOutput";
      
          @Output(TEST_OUT_PUT)
          MessageChannel testOutput();
      }
      
      public interface MqInputMessageSource {
      
          String TEST_IN_PUT = "testInput";
      
          @Input(TEST_IN_PUT)
          SubscribableChannel testInput();
      }
      
      
    • 4.1、消息生产实例:(绑定自定义通道)
        @EnableBinding(MqMessageSource.class)
        public class SendServiceImpl implements ISendService {
      
            @Autowired
            @Qualifier(MqMessageSource.TEST_OUT_PUT)
            MessageChannel messageChannel;
              
            @Override
            public boolean sendMsg(String msg) {
                return messageChannel.send(MessageBuilder.withPayload(msg).build());
            }
              
        }
      
    • 4.2、消息消费实例:
        @Component
        @EnableBinding(value = {MqInputMessageSource.class})
        public class ReceiveServiceImpl implements IReceiveService {
      
            private final static Logger logger = LoggerFactory.getLogger(ReceiveServiceImpl.class);
      
            @Override
            @StreamListener(MqInputMessageSource.TEST_IN_PUT)
            public void receiveTime(Message<String> message) {
                logger.info("接收消息" + message.getPayload().toString());
            }
      
        }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值