场景:

生产者发送消息到交换机并指定一个路由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模式相关推荐

  1. RabbitMQ的Routing 路由模式(Direct)

    RabbitMQ的Routing 路由模式 模式说明: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由key) 消息的发送方在向 Exchange 发送消息时,也必须 ...

  2. 【夏目鬼鬼分享】StringBoot整合RabbitMQ,使用Direct、Fanout、Topic三种模式

    RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的 ...

  3. RabbitMQ学习(四) 订阅模式-Direct(直连)

    直连模式说明 在fanout模式中,一条消息,会被所有订阅的队列都消费,但是在某些场景下,我们希望不同的消息被不同的队列消费,这时就要用到Direct类型的Exchange. 使用说明 1.相较于fa ...

  4. RabbitMQ学习记录 - Direct之Routing模式

    (内容均来自RabbitMQ官网:https://www.rabbitmq.com/tutorials/tutorial-four-java.html) 前面几篇学习了下RabbitMQ的" ...

  5. java 模拟实现mq,RabbitMQ的5种模式,并使用java进行模拟操作

    2. RabbitMQ的5种工作模式 然后就开始记录一下学习到的吧!多多指教 2.1 简单模式 就是将一个生产者绑定到一个消息队列,然后消费者从这个消息队列中取消息进行消费 在生产者与队列之间,使用的 ...

  6. rabbitmq几种工作模式_RabbitMQ的六种工作模式总结

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! 作者:侧身左睡 https://www.cnblogs.com/xyfer1018/p/11581511.ht ...

  7. RabbitMQ 消息队列六种模式

    RabbitMQ 的第一个程序 RabbitMQ-生产者|消费者 搭建环境 java client 生产者和消费者都属于客户端, rabbitMQ的java客户端如下 创建 maven 工程 < ...

  8. RabbitMQ交换器Exchange介绍与实践

    导读 有了Rabbit的基础知识之后(基础知识详见:深入解读RabbitMQ工作原理及简单使用),本章我们重点学习一下Rabbit里面的exchange(交换器)的知识. 交换器分类 RabbitMQ ...

  9. Rabbitmq专题:springboot如何整合Rabbitmq?Rabbitmq有哪些工作模式?

    文章目录 1. Rabbitmq的安装 2. Rabbitmq的基本概念 3. RabbitMQ的工作模式 3.1 "Hello World!" 简单模式 3.2 Work que ...

  10. RabbitMQ交换器Exchange

    交换器分类 RabbitMQ的Exchange(交换器)分为四类: direct(默认) headers fanout topic 其中headers交换器允许你匹配AMQP消息的header而非路由 ...

最新文章

  1. 2022-2028年中国树脂行业市场研究及前瞻分析报告
  2. unity 200.8m yoy_【Unity文档】Realtime GI介绍(一)
  3. sql xml 入门
  4. 【Linux系统编程应用】 Linux Input子系统(一)
  5. .Net在线编辑工具.NET Fiddle
  6. [C++STL]string容器用法介绍
  7. python图片重命名 工具_python - 请问django如何给上传的图片重命名
  8. 浅谈特征选择的原理和Python实现
  9. 响应式web之@media screen
  10. 2020年10月程序员工资统计,平均14459元
  11. 百度地图删除地图上所有的标注和所有的覆盖物
  12. Linux Oracle服务启动停止脚本与开机自启动
  13. 《SEO实战密码》读后一点感受
  14. 1011. World Cup Betting (20)——PAT (Advanced Level) Practise
  15. 传感器基础结构与通信原理
  16. protoc java out_protoc 命令参数
  17. macos masm5 Warning level (0-2) expected after W option
  18. APPLE 知识模块初步设计
  19. 摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文 名“GPU编程与CG语言之阳春白雪下里巴人”
  20. 双11薇娅直播,双芯旗舰iQOO Neo5斩获天猫平台销冠

热门文章

  1. Tf-idf推导及理解
  2. JSARToolKit5文档翻译
  3. 2021-08-03 SELECT简单查询
  4. centos7全盘备份到本地_centos7磁盘备份和还原
  5. 区块链 tps 日志统计脚本
  6. SpringBoot 集成ElasticSearch(二)分页查询
  7. 算法笔记二分查找题目
  8. liunx中查看安装软件和卸载软件和启动程序
  9. 19春北理工计算机应用基础,19春北理工《计算机应用基础》在线作业(02)【标准答案】.doc...
  10. 【Listener】监听器基础