RabbitMQ如何支持动态路由和消息转发

简介: RabbitMQ支持动态路由和消息转发的方式主要是通过Exchange的特性来实现的。
  •  RabbitMQ支持动态路由和消息转发的方式主要是通过Exchange的特性来实现的。
  • 在RabbitMQ中,Exchange是消息的路由器,根据消息的Routing Key和Exchange的类型将消息路由到相应的队列中。RabbitMQ支持多种Exchange类型,包括Direct、Fanout、Topic和Headers等。
  •  其中,Topic类型的Exchange支持动态路由和消息转发的功能。Topic Exchange会根据消息的Routing Key和Exchange的绑定关系,将消息路由到与之匹配的队列中。
  • Topic Exchange的Routing Key是一个字符串,可以使用通配符符号和#,分别代表一个单词和多个单词的匹配。例如,Routing Key为".orange.*“可以匹配"quick.orange.rabbit”、"lazy.orange.elephant"等Routing Key。
  •  通过使用Topic Exchange和通配符符号,可以实现动态路由和消息转发的功能。例如,可以创建一个Exchange,将多个队列绑定到该Exchange上,同时指定不同的Routing Key和通配符符号,根据消息的Routing Key动态地将消息路由到不同的队列中。
  •  总之,RabbitMQ通过Exchange的特性,支持灵活的动态路由和消息转发功能,可以根据实际情况选择合适的Exchange类型和Routing Key,实现复杂的消息路由逻辑。
// 创建连接和信道ConnectionFactoryfactory=newConnectionFactory();
factory.setHost("localhost");
Connectionconnection=factory.newConnection();
Channelchannel=connection.createChannel();
// 定义Exchange和队列StringexchangeName="my.topic.exchange";
StringqueueName1="my.topic.queue1";
StringqueueName2="my.topic.queue2";
channel.exchangeDeclare(exchangeName, "topic", true);
channel.queueDeclare(queueName1, true, false, false, null);
channel.queueDeclare(queueName2, true, false, false, null);
// 将队列绑定到Exchange上,指定不同的Routing Key和通配符符号channel.queueBind(queueName1, exchangeName, "*.orange.*");
channel.queueBind(queueName2, exchangeName, "*.*.rabbit");
// 发送消息Stringmessage1="A quick orange rabbit";
Stringmessage2="A lazy brown dog";
channel.basicPublish(exchangeName, "quick.orange.rabbit", null, message1.getBytes());
channel.basicPublish(exchangeName, "lazy.brown.dog", null, message2.getBytes());
// 创建消费者,消费消息Consumerconsumer1=newDefaultConsumer(channel) {
publicvoidhandleDelivery(StringconsumerTag, Envelopeenvelope, AMQP.BasicPropertiesproperties, byte[] body) throwsIOException {
Stringmessage=newString(body, "UTF-8");
System.out.println("Consumer1 received message: "+message);
        }
    };
Consumerconsumer2=newDefaultConsumer(channel) {
publicvoidhandleDelivery(StringconsumerTag, Envelopeenvelope, AMQP.BasicPropertiesproperties, byte[] body) throwsIOException {
Stringmessage=newString(body, "UTF-8");
System.out.println("Consumer2 received message: "+message);
        }
    };
channel.basicConsume(queueName1, true, consumer1);
channel.basicConsume(queueName2, true, consumer2);
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 Java Kafka
计算机应届生一定要会的JAVA面试题:RabbitMQ是如何实现消息路由的?
一个应届生去面试,可能没有什么实战经验,今天被问到一个这样的面试题,说“RabbitMQ是如何实现消息路由的?“一下子竟然不知道如何组织语言了。今天我给大家分享一下我的理解。
94 1
|
2月前
|
消息中间件 Kafka
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
面试题Kafka问题之RabbitMQ的路由配置工作如何解决
48 1
|
10月前
|
消息中间件 Java Maven
消息中间件系列教程(10) -RabbitMQ -案例代码(路由模式)
消息中间件系列教程(10) -RabbitMQ -案例代码(路由模式)
67 0
|
4月前
|
消息中间件 Java Maven
springboot 使用注解的方式创建rabbitmq的交换机、路由key、以及监听队列的名称
springboot 使用注解的方式创建rabbitmq的交换机、路由key、以及监听队列的名称
|
4月前
|
消息中间件
【面试问题】MQ 消息怎么路由?
【1月更文挑战第27天】【面试问题】MQ 消息怎么路由?
|
消息中间件 存储
【RabbitMQ五】——RabbitMQ路由模式(Routing)
【RabbitMQ五】——RabbitMQ路由模式(Routing)
262 0
|
消息中间件 Java 数据库
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
351 0
RabbitMQ:第二章:Spring整合RabbitMQ(简单模式,广播模式,路由模式,通配符模式,消息可靠性投递,防止消息丢失,TTL,死信队列,延迟队列,消息积压,消息幂等性)
|
消息中间件 存储 缓存
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十三)rocketmq 篇(2):路由注册,消息发送核心流程原理
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十三)rocketmq 篇(2):路由注册,消息发送核心流程原理
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十三)rocketmq 篇(2):路由注册,消息发送核心流程原理
|
消息中间件 Java Spring
RabbitMQ:第三章:Springboot集成RabbitMQ(直连模式,工作队列模式,发布订阅模式,路由模式,通配符模式)
RabbitMQ:第三章:Springboot集成RabbitMQ(直连模式,工作队列模式,发布订阅模式,路由模式,通配符模式)
370 0
RabbitMQ:第三章:Springboot集成RabbitMQ(直连模式,工作队列模式,发布订阅模式,路由模式,通配符模式)
|
消息中间件 算法
RabbitMQ 实战教程(四) 路由
RabbitMQ 实战教程(四) 路由
109 0
RabbitMQ 实战教程(四) 路由