RabbitMQ五种消息队列学习(五)--路由模式
来源:互联网 发布:lol欧服账号淘宝 编辑:程序博客网 时间:2024/06/08 17:23
RabbitMQ五种消息队列学习(五)–路由模式
标签(空格分隔): RabbitMQ
发布订阅模式只是利用路由这个功能,将消息全部分发给所有与路由绑定的队列中,不能对不同的消息进行选择性的分发。
模型结构
路由根据Routing Key进行动态的绑定分发
消息路径如下:
实现
1、生产者
发送一个key:channel.basicPublish(EXCHANGE_NAME, “delete”, null, message.getBytes());
private final static String EXCHANGE_NAME = "test_exchange_direct"; public static void main(String[] argv) throws Exception { // 获取到连接以及mq通道 Connection connection = ConnectionUtil.getConnection(); Channel channel = connection.createChannel(); // 声明exchange channel.exchangeDeclare(EXCHANGE_NAME, "direct"); // 消息内容 String message = "id = 1000"; channel.basicPublish(EXCHANGE_NAME, "delete", null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); channel.close(); connection.close(); }
2、消费者1
绑定路由key
// 绑定队列到交换机
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, “update”);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, “delete”);
private final static String QUEUE_NAME = "test_queue_direct_1"; private final static String EXCHANGE_NAME = "test_exchange_direct"; public static void main(String[] argv) throws Exception { // 获取到连接以及mq通道 Connection connection = ConnectionUtil.getConnection(); Channel channel = connection.createChannel(); // 声明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 绑定队列到交换机 channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "update"); channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "delete"); // 同一时刻服务器只会发一条消息给消费者 channel.basicQos(1); // 定义队列的消费者 QueueingConsumer consumer = new QueueingConsumer(channel); // 监听队列,手动返回完成 channel.basicConsume(QUEUE_NAME, false, consumer); // 获取消息 while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println(" [x] Received '" + message + "'"); Thread.sleep(10); channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); } }
3、消费者2
private final static String QUEUE_NAME = "test_queue_direct_2"; private final static String EXCHANGE_NAME = "test_exchange_direct"; public static void main(String[] argv) throws Exception { // 获取到连接以及mq通道 Connection connection = ConnectionUtil.getConnection(); Channel channel = connection.createChannel(); // 声明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 绑定队列到交换机 channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "insert"); channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "update"); channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "delete"); // 同一时刻服务器只会发一条消息给消费者 channel.basicQos(1); // 定义队列的消费者 QueueingConsumer consumer = new QueueingConsumer(channel); // 监听队列,手动返回完成 channel.basicConsume(QUEUE_NAME, false, consumer); // 获取消息 while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println(" [x] Received '" + message + "'"); Thread.sleep(10); channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); } }
测试
总结:
该模式可以实现对绑定在同一个路由器的地方实现不同的分发模式。那有没有更灵活的处理方式呢?—通配符
阅读全文
0 0
- RabbitMQ五种消息队列学习(五)--路由模式
- RabbitMQ五种消息队列学习(六)--通配符模式(路由类型:Topic)
- RabbitMQ五种消息队列学习(三)--Work模式
- RabbitMQ消息队列(五):Routing 消息路由(转)
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由[转]
- RabbitMQ消息队列(五):Routing 消息路由[转]
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ消息队列(五):Routing 消息路由
- RabbitMQ(五):消息路由
- matlab处理字符串(空格替换)
- 技术分享连载(九十)
- 在项目中遇到的一些关于vue的坑
- Myeclipse安装反编译插件
- 阿里宣布开源容器技术Pouch和P2P文件分发系统“蜻蜓”
- RabbitMQ五种消息队列学习(五)--路由模式
- JackKnife开发专题-方便快捷的IOC框架
- 修改CentOS7的网卡名为eth0
- Redis Cluster迁移目标节点宕机下填坑
- 【数字化】数字化转型成功的企业都发生了什么变化?
- html-webpack-plugin详解
- 网络状态的判断
- Django框架全面讲解 -- Session
- 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速