主页 > 游戏开发  > 

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 发送消息 @Test public void testFanoutExchange() { // 交换机名称 String exchangeName = "harry.fanout"; // 消息 String message = "hello, everyone!"; rabbitTemplate.convertAndSend(exchangeName, "", message); } 2.3 接收消息 @Component public class FanoutConsumer { @RabbitListener(queues = "fanout.queue1") public void listenFanoutQueue1(String msg) { System.out.println("消费者1接收到Fanout消息:【" + msg + "】"); } @RabbitListener(queues = "fanout.queue2") public void listenFanoutQueue2(String msg) { System.out.println("消费者2接收到Fanout消息:【" + msg + "】"); } } 3. Direct交换机

2.1 声明队列和交换机

添加队列direct.queue1 添加队列direct.queue2

添加交换机harry.direct 绑定队列

2.2 发送消息 @Test public void testSendDirectExchange1() { // 交换机名称 String exchangeName = "harry.direct"; // 消息 String message = "红色信息!"; // 发送消息 rabbitTemplate.convertAndSend(exchangeName, "red", message); } @Test public void testSendDirectExchange2() { // 交换机名称 String exchangeName = "harry.direct"; // 消息 String message = "蓝色信息!"; // 发送消息 rabbitTemplate.convertAndSend(exchangeName, "blue", message); } @Test public void testSendDirectExchange3() { // 交换机名称 String exchangeName = "harry.direct"; // 消息 String message = "绿色信息!"; // 发送消息 rabbitTemplate.convertAndSend(exchangeName, "green", message); } 2.3 接收消息 @Component public class FanoutConsumer { @RabbitListener(queues = "direct.queue1") public void listenDirectQueue1(String msg) { System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】"); } @RabbitListener(queues = "direct.queue2") public void listenDirectQueue2(String msg) { System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】"); } } 4. Topic交换机

通配符规则:

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

举例:

item.#:能够匹配item.spu.insert 或者 item.spuitem.*:只能匹配item.spu 2.1 声明队列和交换机

添加队列direct.queue1 添加队列direct.queue2 添加交换机harry.direct 绑定队列

2.2 发送消息 @Test public void testSendTopicExchange() { // 交换机名称 String exchangeName = "harry.topic"; // 消息 String message = "发送消息到routingKey: china.news!"; // 发送消息 rabbitTemplate.convertAndSend(exchangeName, "china.news", message); } 2.3 接收消息 @Component public class FanoutConsumer { @RabbitListener(queues = "topic.queue1") public void listenTopicQueue1(String msg) { System.out.println("消费者1接收到topic.queue1的消息:【" + msg + "】"); } @RabbitListener(queues = "topic.queue2") public void listenTopicQueue2(String msg) { System.out.println("消费者2接收到topic.queue2的消息:【" + msg + "】"); } }
标签:

RabbitMQ交换机由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“RabbitMQ交换机