RabbitMQ通配符模式
通配符模式
一个消息发送者,发送消息
每个消息接收者,都已一个独立的队列
消息会发送到交换机,由交换机发送到队列
根据key,模糊匹配,来接收消息
Send
发送者
package cn.itcast.rabbitmq.topic;import cn.itcast.rabbitmq.util.ConnectionUtil;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;public class Send {private final static String EXCHANGE_NAME = "test_exchange_topic";public static void main(String[] argv) throws Exception {// 获取到连接以及mq通道Connection connection = ConnectionUtil.getConnection();Channel channel = connection.createChannel();// 声明exchangechannel.exchangeDeclare(EXCHANGE_NAME, "topic");// 消息内容String message = "删除商品 ,id=1000";channel.basicPublish(EXCHANGE_NAME, "item.delete", null, message.getBytes());System.out.println(" [x] Sent '" + message + "'");channel.close();connection.close();}
}
Recv
消费者1
package cn.itcast.rabbitmq.topic;import cn.itcast.rabbitmq.util.ConnectionUtil;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;public class Recv {private final static String QUEUE_NAME = "test_queue_topic_topic1";private final static String EXCHANGE_NAME = "test_exchange_topic";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, "item.update");channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "item.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(" 前台系统: '" + message + "'");Thread.sleep(10);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}
}
Recv2
消费者2
package cn.itcast.rabbitmq.topic;import cn.itcast.rabbitmq.util.ConnectionUtil;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;public class Recv2 {private final static String QUEUE_NAME = "test_queue_topic_topic2";private final static String EXCHANGE_NAME = "test_exchange_topic";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, "item.#");// 同一时刻服务器只会发一条消息给消费者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(" 搜索系统: '" + message + "'");Thread.sleep(10);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}
}
启动发送者
启动消费者
测试
生产者,依次发送消息
Item.insert、item.update、item.delete
消费者1
前台系统,接收到2条消息
消费者2
搜索系统,接收到3条消息
注意
通配符,指的是消费者
而不是发送者,发送者不可以使用通配符
RabbitMQ通配符模式相关推荐
- (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:通配符模式,如果对R ...
- (需求实战_进阶_05)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
接上一篇: 文章目录 一.RabbitMQ 配置文件 1. RabbitMQ 生产者配置文件更新 二.启动项目 2.1. 启动项目 2.2. 清空控制台 三.管控台总览 3.1. 登录管控台 3.2. ...
- RabbitMQ通配符模式以及与Routing模式的区别
- RabbitMQ的Topics 通配符模式(Topic)
RabbitMQ的Topics 通配符模式(Topic) 模式说明 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列.只不过 Topic 类型Exch ...
- RabbitMQ消息队列(六):SpringBoot整合之通配符模式
RabbitMQ消息队列(六):SpringBoot整合之通配符模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeZQrNHS-1660220618697)(E: ...
- (需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试
背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:订阅模式,如果对Ra ...
- rabbitMq工作模式特性及整合springboot
因为公司项目后面需要用到mq做数据的同步,所以学习mq并在此记录,这里的是rabbitMq mq(message queue)消息队列 官网:www.rabbitmq.com 使用消息队列的优点:1. ...
- RabbitMQ初步到精通-第四章-RabbitMQ工作模式-Routing
第四章-RabbitMQ工作模式-Routing 1.模式介绍 1.1 模式 路由模式-继续还是和Exchange打交道,上节提到的Exchange类型为Fanout,此次声明的类型为direct 与 ...
- RabbitMQ六大模式
RabbitMQ六大模式 文章目录 前言 一.简单模式 二.Work queues工作队列模式 三.Publish/Subscribe发布与订阅模式 四.Routing路由模式 五.Topics通配符 ...
最新文章
- iOS - Regex 正则表达式
- Windows7 设置 Java环境变量
- hadoop过程中遇到的错误与解决方法
- MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
- CVPR14与图像视频检索相关的论文
- android简单点餐系统_微信点餐和扫码点餐系统能为商家带来什么?
- mysql-5.5.50-winx64
- Android之解决aidl里面函数参数太大不能跨进程通信的问题
- 邓迎春绘画201702作品10
- 微信公众号开发之微信服务器配置
- linux批量重命名脚本,Linux批量命名文件SH脚本整理
- idea 热部署_Spring Boot Idea中热部署(自动刷新)
- 网络安全 —— 对称与非对称加密
- 使用php函数判断数字,PHP 几个常用数字判断函数的简单示例
- 记录一次Centos磁盘空间占满的解决办法(转)
- The seventeenth day
- 操作系统课设实验五---Nachos文件系统扩展
- java JDK的下载与安装 JVM JRE JDK区别
- 细节至上——Splus微博设计之界面篇(转)
- 关于利用Windows权限屏蔽Win10易升