RabbitMQ之Exchange Topics模式
1. “ * ”的使用:
生产者:
- package com.toov5.topic;
- 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 TopicProducer {
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- public static void main(String[] args) throws IOException, TimeoutException {
- //建立MQ连接
- Connection connection = MQConnectionUtils.newConnection();
- //创建通道
- Channel channel = connection.createChannel();
- //生产者绑定交换机
- channel.exchangeDeclare(EXCHANGE_NAME, "topic"); //交换机名称 交换机类型
- String routingKey="log.email"; //消息只会给邮件类型的
- //创建对应的消息
- String msString = "my_Routing_destination_msg"+routingKey;
- //通过频道 发送消息
- System.out.println("生产者投递消息:"+msString);
- channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
- //关闭通道 和 连接
- channel.close();
- connection.close();
- }
- }
消费者:
- package com.toov5.topic;
- 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 ConsumerSMSTopic {
- private static final String SMS_QUEUE ="sms_queue_topic";
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- 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, "log.*");
- //消费者监听消息
- DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
- //重写监听方法
- @Override
- public 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); //绑定队列 事件监听
- }
- }
- package com.toov5.topic;
- 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 ConsumerEmailTopic {
- private static final String EMAIL_QUEUE ="email_queue_topic";
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- 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, "log.email");
- //消费者监听消息
- DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
- //重写监听方法
- @Override
- public 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); //绑定队列 事件监听
- }
- }
可以看到两个消费者都可以接收到
2.换成 “#”
生产者:
- package com.toov5.topic;
- 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 TopicProducer {
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- public static void main(String[] args) throws IOException, TimeoutException {
- //建立MQ连接
- Connection connection = MQConnectionUtils.newConnection();
- //创建通道
- Channel channel = connection.createChannel();
- //生产者绑定交换机
- channel.exchangeDeclare(EXCHANGE_NAME, "topic"); //交换机名称 交换机类型
- String routingKey="log.email.sms"; //消息只会给邮件类型的
- //创建对应的消息
- String msString = "my_Routing_destination_msg"+routingKey;
- //通过频道 发送消息
- System.out.println("生产者投递消息:"+msString);
- channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
- //关闭通道 和 连接
- channel.close();
- connection.close();
- }
- }
消费者:
- package com.toov5.topic;
- 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 ConsumerSMSTopic {
- private static final String SMS_QUEUE ="sms_queue_topic";
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- 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, "log.#");
- //消费者监听消息
- DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
- //重写监听方法
- @Override
- public 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); //绑定队列 事件监听
- }
- }
- package com.toov5.topic;
- 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 ConsumerEmailTopic {
- private static final String EMAIL_QUEUE ="email_queue_topic";
- //交换机名称
- private static final String EXCHANGE_NAME = "my_topic";
- 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, "log.email");
- //消费者监听消息
- DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
- //重写监听方法
- @Override
- public 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); //绑定队列 事件监听
- }
- }
总结 “*” 匹配一个词 “#”匹配多个词
RabbitMQ之Exchange Topics模式的更多相关文章
- RabbitMQ之Exchange Direct模式
场景: 生产者发送消息到交换机并指定一个路由key, 消费者队列绑定到交换机时要指定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那 ...
- RabbitMq 6种使用模式
RabbitMQ的5种模式与实例 1.1 简单模式Hello World 功能:一个生产者P发送消息到队列Q,一个消费者C接收 生产者实现思路: 创建连接工厂ConnectionFactory,设置服 ...
- RabbitMQ的六种工作模式总结
最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...
- 面试官:RabbitMQ有哪些工作模式?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又.又.又来面试了,还是老规 ...
- RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践
RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...
- Rabbitmq交换器Exchange和消息队列
通常我们谈到队列服务, 会有三个概念: 发消息者.队列.收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者 ...
- 【RabbitMQ学习之二】RabbitMQ四种交换机模式应用
环境 win7 rabbitmq-server-3.7.17 Erlang 22.1 一.概念1.队列队列用于临时存储消息和转发消息.队列类型有两种,即时队列和延时队列. 即时队列:队列中的消息会被立 ...
- RabbitMQ交换器Exchange介绍与实践
RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...
- 手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端)
原文地址:手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端) 为什么使用 MQ? 在这里我就不多说了,无非就是削峰.解耦和异步.这里没有很多关于 MQ 的理论和概念,只想手把手带你一 ...
随机推荐
- 安装java运行环境
1.查看java安装版本 执行命令java -version查看已安装java运行环境信息. 2.下载JDK 到sun官网下载需要的jdk版本,地址为:http://www.oracle.com/te ...
- sublime 插件篇
添加插件 进入https://packagecontrol.io/installation 找到 或者 直接复制 import urllib.request,os,hashlib; h = '6f ...
- Android6.0系统添加那些新特性
北京时间9月30日凌晨在美国旧金山举行2015年秋季新品公布会.在公布会上代号为"Marshmallow(棉花糖)"的安卓6.0系统正式推出.新系统的总体设计风格依旧保持扁 ...
- struts2在项目中的应用之下载
文件下载是一个非经常见的功能,用struts2实现文件下载的步骤: 一)定义一个Action类.FileDownload.java package com.struts2.filedownload; ...
- 启动spring boot 异常
再我搭建spring boot工程后,run application的时候抛出下面异常 Exception /slf4j-log4j12-.jar). If you are using WebLogi ...
- macOS 安装安卓模拟器 并用charles抓包
mac上面安装安卓模拟器并能使用charles抓包软件调研 一.Genymotion 1.先下载Virtua Box虚拟机 https://www.virtualbox.org/wiki/Downlo ...
- 【Mac】之svn上传/删除文件命令
创建文件后,进入文件夹下: ①先checkoutsvn地址: svn checkout https://xxxx:0000/svn/CM_B2B_Document/06_Testing/B2B_Ste ...
- 【转】【Mac系统】之Python版本切换、谷歌浏览器取消自动升级
都是很有用的文章,本文都是转载文章,以便后续查阅: Mac Chrome浏览器取消自动升级(看这一篇就够了) <Mac修改默认python版本> <mac设置python版本切换,和 ...
- mybaits返回插入成功后的自增值
mybaits返回插入成功后的自增值 在项目中,我们经常遇到这样的情况:insert语句成功后,需要自增的id值,这个时候,我们可以通过mybatis的 useGeneratedKeys 来实现,具体 ...
- resin 4.0 项目的配置
前一篇我们了解了resin中配置数据源,依照不同项目的要求我们进行数据源的配置,如多个项目共享多个数据源,一个项目配置多个数据源,以下我们来看看项目的部署方式: 1.在一个host(虚拟主机)下配置一 ...