rabbitMQ五种消息发送模式——路由模式

青旅半醒 2023-03-03 05:59 108阅读 0赞

紧接上一篇:https://blog.csdn.net/qq_36357242/article/details/107686056

本篇介绍路由模式

路由模式

路由模式是可以根据路由键选择性给多个消费者发送消息的模式,它包含一个生产者、两个消费者、两个队列和一个交换机。两个消费者同时绑定到不同的队列上去,两个队列通过路由键绑定到交换机上去,生产者发送消息到交换机,交换机通过路由键转发到不同队列,队列绑定的消费者接收并消费消息。

format_png

声明交换机和队列

  1. //声明路由模式交换机
  2. @Bean
  3. public DirectExchange direct() {
  4. return new DirectExchange("exchange.direct");
  5. }
  6. //申明俩个路由模式队列
  7. @Bean
  8. public Queue directQueue1() {
  9. return new Queue("direct1"); //队列一
  10. }
  11. @Bean
  12. public Queue directQueue2() {
  13. return new Queue("direct2"); //队列二
  14. }
  15. //将队列队列一绑定到交换机
  16. @Bean
  17. public Binding directBinding1a(DirectExchange direct, Queue directQueue1) {
  18. return BindingBuilder.bind(directQueue1).to(direct).with("orange");
  19. }
  20. @Bean
  21. public Binding directBinding1b(DirectExchange direct, Queue directQueue1) {
  22. //
  23. return BindingBuilder.bind(directQueue1).to(direct).with("black");
  24. }
  25. //将队列队列二绑定到交换机
  26. @Bean
  27. public Binding directBinding2a(DirectExchange direct, Queue directQueue2) {
  28. return BindingBuilder.bind(directQueue2).to(direct).with("green");
  29. }
  30. @Bean
  31. public Binding directBinding2b(DirectExchange direct, Queue directQueue2) {
  32. return BindingBuilder.bind(directQueue2).to(direct).with("black");
  33. }

创建生产者(发送者)

  1. //创建消息发送者
  2. public void sendToDirect() {
  3. String context = "路由模式发送的消息";
  4. System.out.println("路由模式发送者: " + context);
  5. //走black路由
  6. this.rabbitTemplate.convertAndSend("exchange.direct", "black",context);
  7. //走orange路由
  8. // this.rabbitTemplate.convertAndSend("exchange.direct", "orange",context);
  9. //走green路由
  10. // this.rabbitTemplate.convertAndSend("exchange.direct", "green",context);
  11. }

创建消费者(接收者)

  1. @RabbitListener(queues = "direct1")
  2. @RabbitHandler
  3. public void process6(String direct) {
  4. System.err.println("路由模式 消费者1: " + direct);
  5. }
  6. @RabbitListener(queues = "direct2")
  7. @RabbitHandler
  8. public void process7(String direct) {
  9. System.out.println("路由模式 消费者2: " + direct);
  10. }

运行

  1. //路由模式
  2. @Test
  3. public void contextLoads4() {
  4. for (int i = 0;i<10; i++){
  5. senderConfig.sendToDirect();
  6. }
  7. }

20200730134821467.png

不同的路由自己试一下。

发表评论

表情:
评论列表 (有 0 条评论,108人围观)

还没有评论,来说两句吧...

相关阅读