0


RabbitMQ交换机

1. 交换机类型

在这里插入图片描述

  • Publisher:生产者,发送消息到交换机
  • Exchange:交换机,一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!
  • Queue:消息队列,接收消息、缓存消息。不过队列一定要与交换机绑定
  • Consumer:消费者,订阅队列

交换机的类型有四种:

  • Fanout:广播,将消息交给所有绑定到交换机的队列。
  • Direct:订阅,基于RoutingKey(路由key)发送给订阅了消息的队列。
  • Topic:通配符订阅,与Direct类似,只不过RoutingKey可以使用通配符。
  • Headers:头匹配,基于MQ的消息头匹配,用的较少。

2. Fanout交换机

在这里插入图片描述

2.1 声明队列和交换机

添加队列fanout.queue1
在这里插入图片描述

添加队列fanout.queue2在这里插入图片描述

添加交换机harry.fanout
添加交换机
绑定队列
在这里插入图片描述

2.2 发送消息

@TestpublicvoidtestFanoutExchange(){// 交换机名称String exchangeName ="harry.fanout";// 消息String message ="hello, everyone!";
    rabbitTemplate.convertAndSend(exchangeName,"", message);}

2.3 接收消息

@ComponentpublicclassFanoutConsumer{@RabbitListener(queues ="fanout.queue1")publicvoidlistenFanoutQueue1(String msg){System.out.println("消费者1接收到Fanout消息:【"+ msg +"】");}@RabbitListener(queues ="fanout.queue2")publicvoidlistenFanoutQueue2(String msg){System.out.println("消费者2接收到Fanout消息:【"+ msg +"】");}}

3. Direct交换机

在这里插入图片描述

2.1 声明队列和交换机

添加队列direct.queue1
添加队列direct.queue2
在这里插入图片描述

添加交换机harry.direct
绑定队列
在这里插入图片描述
在这里插入图片描述

2.2 发送消息

@TestpublicvoidtestSendDirectExchange1(){// 交换机名称String exchangeName ="harry.direct";// 消息String message ="红色信息!";// 发送消息
    rabbitTemplate.convertAndSend(exchangeName,"red", message);}@TestpublicvoidtestSendDirectExchange2(){// 交换机名称String exchangeName ="harry.direct";// 消息String message ="蓝色信息!";// 发送消息
    rabbitTemplate.convertAndSend(exchangeName,"blue", message);}@TestpublicvoidtestSendDirectExchange3(){// 交换机名称String exchangeName ="harry.direct";// 消息String message ="绿色信息!";// 发送消息
    rabbitTemplate.convertAndSend(exchangeName,"green", message);}

2.3 接收消息

@ComponentpublicclassFanoutConsumer{@RabbitListener(queues ="direct.queue1")publicvoidlistenDirectQueue1(String msg){System.out.println("消费者1接收到direct.queue1的消息:【"+ msg +"】");}@RabbitListener(queues ="direct.queue2")publicvoidlistenDirectQueue2(String msg){System.out.println("消费者2接收到direct.queue2的消息:【"+ msg +"】");}}

4. Topic交换机

通配符规则:

  • #:匹配一个或多个词
  • *:匹配不多不少恰好1个词

举例:

  • item.#:能够匹配item.spu.insert 或者 item.spu
  • item.*:只能匹配item.spu在这里插入图片描述

2.1 声明队列和交换机

添加队列direct.queue1
添加队列direct.queue2
添加交换机harry.direct
绑定队列
在这里插入图片描述

2.2 发送消息

@TestpublicvoidtestSendTopicExchange(){// 交换机名称String exchangeName ="harry.topic";// 消息String message ="发送消息到routingKey: china.news!";// 发送消息
    rabbitTemplate.convertAndSend(exchangeName,"china.news", message);}

2.3 接收消息

@ComponentpublicclassFanoutConsumer{@RabbitListener(queues ="topic.queue1")publicvoidlistenTopicQueue1(String msg){System.out.println("消费者1接收到topic.queue1的消息:【"+ msg +"】");}@RabbitListener(queues ="topic.queue2")publicvoidlistenTopicQueue2(String msg){System.out.println("消费者2接收到topic.queue2的消息:【"+ msg +"】");}}
标签: rabbitmq 分布式

本文转载自: https://blog.csdn.net/weixin_46376562/article/details/136121307
版权归原作者 程序员 Harry 所有, 如有侵权,请联系我们删除。

“RabbitMQ交换机”的评论:

还没有评论