RabbitMQ之Exchange Direct模式
场景:
生产者发送消息到交换机并指定一个路由key,
消费者队列绑定到交换机时要指定路由key(key匹配就能接受消息,key不匹配就不能接受消息)
例如:我们可以把路由key设置为insert ,那么消费者队列key指定包含insert才可以接收消息,消费者队列key定义为update或者delete就不能接收消息。很好的控制了更新,插入和删除的操作。
注:
前面做的demo中RoutingKey设置的空
RoutingKey有值的时候,那么 经过消息队列之后,需要在经过 RoutingKey进行判断决定 消费者
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.toov5.rabibitMQScribe</groupId><artifactId>rabibitMQScribe</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.6.5</version></dependency></dependencies></project>
producer
package com.toov5.routing;import java.io.IOException; import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.toov5.utils.MQConnectionUtils;//生产者 交换机类型 producerFanout类型 public class RoutingProducer {//交换机名称private static final String EXCHANGE_NAME = "my_routing"; public static void main(String[] args) throws IOException, TimeoutException {//建立MQ连接Connection connection = MQConnectionUtils.newConnection();//创建通道Channel channel = connection.createChannel();//生产者绑定交换机channel.exchangeDeclare(EXCHANGE_NAME, "direct"); //交换机名称 交换机类型 String routingKey="email";//创建对应的消息 String msString = "my_Routing_destination_msg"+routingKey;//通过频道 发送消息System.out.println("生产者投递消息:"+msString); channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());//关闭通道 和 连接 channel.close();connection.close();}}
consumer:
package com.toov5.routing;import java.io.IOException; import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import com.rabbitmq.client.AMQP.BasicProperties; import com.toov5.utils.MQConnectionUtils;//邮件消费者 public class ConsumerEmailRouting {private static final String EMAIL_QUEUE ="email_queue_routing";//交换机名称private static final String EXCHANGE_NAME = "my_routing"; public static void main(String[] args) throws IOException, TimeoutException {System.out.println("邮件消费者启动");//建立MQ连接Connection connection = MQConnectionUtils.newConnection(); //创建通道Channel channel = connection.createChannel();//消费者声明队列channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);//消费者队列绑定 路由channel.queueBind(EMAIL_QUEUE, EXCHANGE_NAME, "email");//消费者监听消息DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {//重写监听方法 @Overridepublic void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)throws IOException { String msg = new String(body,"UTF-8");System.out.println("邮件消费者获取生产者消息"+msg);}};channel.basicConsume(EMAIL_QUEUE,true, defaultConsumer); //绑定队列 事件监听 } }
package com.toov5.routing;import java.io.IOException; import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import com.rabbitmq.client.AMQP.BasicProperties; import com.toov5.utils.MQConnectionUtils;//邮件消费者 public class ConsumerSMSRouting {private static final String SMS_QUEUE ="sms_queue_routing";//交换机名称private static final String EXCHANGE_NAME = "my_routing"; public static void main(String[] args) throws IOException, TimeoutException {System.out.println("短信消费者启动");//建立MQ连接Connection connection = MQConnectionUtils.newConnection(); //创建通道Channel channel = connection.createChannel();//消费者声明队列channel.queueDeclare(SMS_QUEUE, false, false, false, null);//消费者队列绑定 路由channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "email");channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "sms");//消费者监听消息DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {//重写监听方法 @Overridepublic void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)throws IOException { String msg = new String(body,"UTF-8");System.out.println("邮件消费者获取生产者消息"+msg);}};channel.basicConsume(SMS_QUEUE,true, defaultConsumer); //绑定队列 事件监听 } }
运行结果:
绑定两个:
转载于:https://www.cnblogs.com/toov5/p/9944019.html
RabbitMQ之Exchange Direct模式相关推荐
- RabbitMQ的Routing 路由模式(Direct)
RabbitMQ的Routing 路由模式 模式说明: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由key) 消息的发送方在向 Exchange 发送消息时,也必须 ...
- 【夏目鬼鬼分享】StringBoot整合RabbitMQ,使用Direct、Fanout、Topic三种模式
RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的 ...
- RabbitMQ学习(四) 订阅模式-Direct(直连)
直连模式说明 在fanout模式中,一条消息,会被所有订阅的队列都消费,但是在某些场景下,我们希望不同的消息被不同的队列消费,这时就要用到Direct类型的Exchange. 使用说明 1.相较于fa ...
- RabbitMQ学习记录 - Direct之Routing模式
(内容均来自RabbitMQ官网:https://www.rabbitmq.com/tutorials/tutorial-four-java.html) 前面几篇学习了下RabbitMQ的" ...
- java 模拟实现mq,RabbitMQ的5种模式,并使用java进行模拟操作
2. RabbitMQ的5种工作模式 然后就开始记录一下学习到的吧!多多指教 2.1 简单模式 就是将一个生产者绑定到一个消息队列,然后消费者从这个消息队列中取消息进行消费 在生产者与队列之间,使用的 ...
- rabbitmq几种工作模式_RabbitMQ的六种工作模式总结
精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! 作者:侧身左睡 https://www.cnblogs.com/xyfer1018/p/11581511.ht ...
- RabbitMQ 消息队列六种模式
RabbitMQ 的第一个程序 RabbitMQ-生产者|消费者 搭建环境 java client 生产者和消费者都属于客户端, rabbitMQ的java客户端如下 创建 maven 工程 < ...
- RabbitMQ交换器Exchange介绍与实践
导读 有了Rabbit的基础知识之后(基础知识详见:深入解读RabbitMQ工作原理及简单使用),本章我们重点学习一下Rabbit里面的exchange(交换器)的知识. 交换器分类 RabbitMQ ...
- Rabbitmq专题:springboot如何整合Rabbitmq?Rabbitmq有哪些工作模式?
文章目录 1. Rabbitmq的安装 2. Rabbitmq的基本概念 3. RabbitMQ的工作模式 3.1 "Hello World!" 简单模式 3.2 Work que ...
- RabbitMQ交换器Exchange
交换器分类 RabbitMQ的Exchange(交换器)分为四类: direct(默认) headers fanout topic 其中headers交换器允许你匹配AMQP消息的header而非路由 ...
最新文章
- 2022-2028年中国树脂行业市场研究及前瞻分析报告
- unity 200.8m yoy_【Unity文档】Realtime GI介绍(一)
- sql xml 入门
- 【Linux系统编程应用】 Linux Input子系统(一)
- .Net在线编辑工具.NET Fiddle
- [C++STL]string容器用法介绍
- python图片重命名 工具_python - 请问django如何给上传的图片重命名
- 浅谈特征选择的原理和Python实现
- 响应式web之@media screen
- 2020年10月程序员工资统计,平均14459元
- 百度地图删除地图上所有的标注和所有的覆盖物
- Linux Oracle服务启动停止脚本与开机自启动
- 《SEO实战密码》读后一点感受
- 1011. World Cup Betting (20)——PAT (Advanced Level) Practise
- 传感器基础结构与通信原理
- protoc java out_protoc 命令参数
- macos masm5 Warning level (0-2) expected after W option
- APPLE 知识模块初步设计
- 摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文 名“GPU编程与CG语言之阳春白雪下里巴人”
- 双11薇娅直播,双芯旗舰iQOO Neo5斩获天猫平台销冠