routing路由模式
一:介绍
1.模式

2.应用场景
如果exchangge与队列中的key相同,消息就发送过去。
这个就是需要将交换机与队列增加key。
3.路由类型
上节课的订阅模式中的路由类型是Fanout。
这篇文章的路由类型是Direct。
二:程序
1.生产者
package com.mq.routing; import com.mq.utils.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; public class RoutingSend {
private static final String EXCHANGE_NAME="test_exchange_direct";
private static final String QUEUE_NAME="test_queue_direct_1";
public static void main(String[] args)throws Exception{
Connection connection= ConnectionUtil.getConnection();
Channel channel=connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME,"direct");
String msg="hello routing";
//重点是第二个参数routingKey
String routingKey="info";
channel.basicPublish(EXCHANGE_NAME,routingKey,null,msg.getBytes());
System.out.println("msg send:"+msg);
channel.close();
connection.close();
}
}
2.消费者一
package com.mq.routing; import com.mq.utils.ConnectionUtil;
import com.rabbitmq.client.*; import java.io.IOException; public class RoutingReceive1 {
private static final String EXCHANGE_NAME="test_exchange_direct";
private static final String QUEUE_NAME="test_queue_direct_1";
public static void main(String[] args)throws Exception{
Connection connection= ConnectionUtil.getConnection();
final Channel channel=connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"error");
channel.basicQos(1);
Consumer consumer=new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg = new String(body, "utf-8");
System.out.println("[1] receive:" + msg);
try {
Thread.sleep(200);
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("[done]");
channel.basicAck(envelope.getDeliveryTag(),false);
}
}
};
boolean autoAck=false;
channel.basicConsume(QUEUE_NAME,autoAck,consumer);
}
}
3.消费者二
package com.mq.routing; import com.mq.utils.ConnectionUtil;
import com.rabbitmq.client.*; import java.io.IOException; public class RoutingReceive2 {
private static final String EXCHANGE_NAME="test_exchange_direct";
private static final String QUEUE_NAME="test_queue_direct_2";
public static void main(String[] args)throws Exception{
Connection connection= ConnectionUtil.getConnection();
final Channel channel=connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"error");
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"info");
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"waring");
channel.basicQos(1);
Consumer consumer=new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg = new String(body, "utf-8");
System.out.println("[1] receive:" + msg);
try {
Thread.sleep(200);
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("[done]");
channel.basicAck(envelope.getDeliveryTag(),false);
}
}
};
boolean autoAck=false;
channel.basicConsume(QUEUE_NAME,autoAck,consumer);
}
}
4.现象
send:

receive1:

receive2:

routing路由模式的更多相关文章
- LVS模式一:直接路由模式DR(Direct Routing)
(一)LVS 一.LVS的了解 LVS(Linux Virtual Server)可以理解为一个虚拟服务器系统. Internet的飞速发展,网络带宽的增长,Web服务中越来越多地使用CGI.动态主页 ...
- python使用rabbitMQ介绍四(路由模式)
一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...
- RabbitMQ六种队列模式-路由模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...
- ASP.NET Core路由中间件[2]: 路由模式
一个Web应用本质上体现为一组终结点的集合.终结点则体现为一个暴露在网络中可供外界采用HTTP协议调用的服务,路由的作用就是建立一个请求URL模式与对应终结点之间的映射关系.借助这个映射关系,客户端可 ...
- .NET/ASP.NET Routing路由(深入解析路由系统架构原理)
阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4 ...
- 修改thinkphp路由模式,去掉Home
第一步:入口文件增加 define('BIND_MODULE', 'Home'); 第二步:修改config文件,我这里路由模式设置为2 效果展示:
- RabbitMQ 一二事(4) - 路由模式介绍
路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...
- .NET/ASP.NET Routing路由(深入解析路由系统架构原理)http://wangqingpei557.blog.51cto.com/1009349/1312422
阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4 ...
- NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)
NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...
随机推荐
- mysql手工注入总结
mysql -u 用户名 -p 密码 -h IP地址 show databases; 查看数据库 select version(); php注入的版本号 use database(表名): sho ...
- Java——集合
Java的集合类是一种非常有用的工具类,用于存储多个对象.它是一个容器,可以把多个对象放到里面. Java集合分三种情况: Set:无序.不可重复 List:有序.可重复 Map:具有映射关系 Col ...
- Linux - find 查找
# linux文件无创建时间 # Access 使用时间 # Modify 内容修改时间 # Change 状态改变时间(权限.属主) # 时间默认以24小时为单位,当前时间到向前24小时为0天,向前 ...
- Elaticsearch 集群
elasticsearch开源的搜索引擎: ElasticSearch 个基于Lucene的搜索服务器:可以使用多节点的备份:集群设置: (类似是个数据库型.有索引有什么的).(lucene apa ...
- 2、Saltstack的数据系统
一.Grains grains是salt用来收集minion端底层系统信息的接口.比如,操作系统type.域名 .IP地址.内存及其他相关系统属性信息等.存储在minion端,用于保存minion ...
- CSS font-family 各名称一览表
参考链接:https://blog.csdn.net/cddcj/article/details/70739481
- STM32 变量无法赋值问题
STM32 在用JLink 调试的时候发现有一条将unsigned char赋值给int的语句始终不能执行,int类型变量的值始终为0: 查资料找到这个问题是编译器优化的原因,也就是说由于编译器优化, ...
- 【转】Python之文件读写
[转]Python之文件读写 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 ...
- 配置使用OpenCV静态链接库
配置opencv静态链接库需要用到:staticlib 在配置链接器->附加库目录时应该为staticlib的路径.同理若是利用动态链接库则只需要lib的路径: 动态链接库则使用lib,然而在使 ...
- iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图
iPhone 收藏网址[添加到书签] 和 [添加到主屏幕] 显示自定义图标,而不是网页截图: <!-- Safari浏览器[添加到书签] --> <link rel="sh ...