通配符模式

一个消息发送者,发送消息
每个消息接收者,都已一个独立的队列

消息会发送到交换机,由交换机发送到队列
根据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通配符模式相关推荐

  1. (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

    背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:通配符模式,如果对R ...

  2. (需求实战_进阶_05)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

    接上一篇: 文章目录 一.RabbitMQ 配置文件 1. RabbitMQ 生产者配置文件更新 二.启动项目 2.1. 启动项目 2.2. 清空控制台 三.管控台总览 3.1. 登录管控台 3.2. ...

  3. RabbitMQ通配符模式以及与Routing模式的区别

  4. RabbitMQ的Topics 通配符模式(Topic)

    RabbitMQ的Topics 通配符模式(Topic) 模式说明 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列.只不过 Topic 类型Exch ...

  5. RabbitMQ消息队列(六):SpringBoot整合之通配符模式

    RabbitMQ消息队列(六):SpringBoot整合之通配符模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeZQrNHS-1660220618697)(E: ...

  6. (需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

    背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:订阅模式,如果对Ra ...

  7. rabbitMq工作模式特性及整合springboot

    因为公司项目后面需要用到mq做数据的同步,所以学习mq并在此记录,这里的是rabbitMq mq(message queue)消息队列 官网:www.rabbitmq.com 使用消息队列的优点:1. ...

  8. RabbitMQ初步到精通-第四章-RabbitMQ工作模式-Routing

    第四章-RabbitMQ工作模式-Routing 1.模式介绍 1.1 模式 路由模式-继续还是和Exchange打交道,上节提到的Exchange类型为Fanout,此次声明的类型为direct 与 ...

  9. RabbitMQ六大模式

    RabbitMQ六大模式 文章目录 前言 一.简单模式 二.Work queues工作队列模式 三.Publish/Subscribe发布与订阅模式 四.Routing路由模式 五.Topics通配符 ...

最新文章

  1. iOS - Regex 正则表达式
  2. Windows7 设置 Java环境变量
  3. hadoop过程中遇到的错误与解决方法
  4. MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
  5. CVPR14与图像视频检索相关的论文
  6. android简单点餐系统_微信点餐和扫码点餐系统能为商家带来什么?
  7. mysql-5.5.50-winx64
  8. Android之解决aidl里面函数参数太大不能跨进程通信的问题
  9. 邓迎春绘画201702作品10
  10. 微信公众号开发之微信服务器配置
  11. linux批量重命名脚本,Linux批量命名文件SH脚本整理
  12. idea 热部署_Spring Boot Idea中热部署(自动刷新)
  13. 网络安全 —— 对称与非对称加密
  14. 使用php函数判断数字,PHP 几个常用数字判断函数的简单示例
  15. 记录一次Centos磁盘空间占满的解决办法(转)
  16. The seventeenth day
  17. 操作系统课设实验五---Nachos文件系统扩展
  18. java JDK的下载与安装 JVM JRE JDK区别
  19. 细节至上——Splus微博设计之界面篇(转)
  20. 关于利用Windows权限屏蔽Win10易升

热门文章

  1. Dubbo实现原理之基于SPI思想实现Dubbo内核
  2. java基础----Runtime类的使用(一)
  3. Quartz格式设置说明
  4. 移动端双指缩放、旋转
  5. Jsp (Java Server Pages)相关知识九大内置对象和四大作用域
  6. sql添加列,删除列,修改列
  7. 关于英汉混合字符串的分隔方法
  8. URAL 1014 Product of Digits
  9. MasterPage事件使用
  10. 深度学习的数学 (6)误差反向传播法必需的链式法则