【spring cloud】stream集成rabbitMQ,实现Topic订阅发布

stream主要负责与消息相关的功能,如与消息中间件rabbitMQ的集成等。这里先示例一个广播功能。生产者 发布消息后,所有的消费者都可以消费到消息。

1,引入依赖

    <dependencies>
        <!-- spring boot web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- spring boot actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- stream -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
    </dependencies>

2,创建Topic

public interface MyTopic {

    String INPUT= "myTopic-consumer";

    String OUTPUT ="myTopic-producer";

    //input是消费者那一方(接收消息的)
    //output是生产者那一方(推送消息的)
    //SubscribaleChannel意味可被订阅的channel
    @Input(INPUT)
    SubscribableChannel input();

    //两个topic被注入到channel的时候,还会被作为一个bean注入进来,如果input和output名字重复了,就会报bean重复异常。
    //因此input和output需要不同的名字,为此还需要在配置文件中将两个名字绑定
    @Output(OUTPUT)
    MessageChannel output();
}

3,配置文件

在配置文件中将两个channel绑定到一个exchange(名为braodcast)上。这样,这个项目就可以同时作为生产者和消费者。rabbitmq会自动为我们创建需要的queue,名字格式为exchangeName.queueName,如
在这里插入图片描述
配置如下:

#绑定channel到broadcast
spring.cloud.stream.bindings.myTopic-consumer.destination=broadcast
spring.cloud.stream.bindings.myTopic-producer.destination=broadcast

配置到此为止,下面可以进行测试了。
生产者:

@RestController
@Slf4j
public class Controller {

    @Autowired
    private MyTopic producer;
    
    @PostMapping("send")
    public void sendMessage(@RequestParam String body){
        producer.output().send(MessageBuilder.withPayload(body).build());
    }
   }

消费者:

@Slf4j
@EnableBinding(value = {
        MyTopic.class
}
)
public class StreamConsumer {

    @StreamListener(MyTopic.INPUT)
    public void consumeMyMessage(Object payLoad) {
        log.info("My message consumed successfully, payLoad={}", payLoad);
    }
}

如此,可以在调用后,在mq和日志中发现消息消费的痕迹。这种exchange为topic类型,由于没有routing key,会将消息广播出去。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值