1. “ * ”的使用:

生产者:

  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.toov5.utils.MQConnectionUtils;
  9.  
  10. //生产者 交换机类型 producerFanout类型
  11. public class TopicProducer {
  12. //交换机名称
  13. private static final String EXCHANGE_NAME = "my_topic";
  14. public static void main(String[] args) throws IOException, TimeoutException {
  15. //建立MQ连接
  16. Connection connection = MQConnectionUtils.newConnection();
  17. //创建通道
  18. Channel channel = connection.createChannel();
  19. //生产者绑定交换机
  20. channel.exchangeDeclare(EXCHANGE_NAME, "topic"); //交换机名称 交换机类型
  21. String routingKey="log.email"; //消息只会给邮件类型的
  22. //创建对应的消息
  23. String msString = "my_Routing_destination_msg"+routingKey;
  24. //通过频道 发送消息
  25. System.out.println("生产者投递消息:"+msString);
  26. channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
  27. //关闭通道 和 连接
  28. channel.close();
  29. connection.close();
  30. }
  31.  
  32. }

消费者:

  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.rabbitmq.client.DefaultConsumer;
  9. import com.rabbitmq.client.Envelope;
  10. import com.rabbitmq.client.AMQP.BasicProperties;
  11. import com.toov5.utils.MQConnectionUtils;
  12.  
  13. //邮件消费者
  14. public class ConsumerSMSTopic {
  15. private static final String SMS_QUEUE ="sms_queue_topic";
  16. //交换机名称
  17. private static final String EXCHANGE_NAME = "my_topic";
  18. public static void main(String[] args) throws IOException, TimeoutException {
  19. System.out.println("短信消费者启动");
  20. //建立MQ连接
  21. Connection connection = MQConnectionUtils.newConnection();
  22. //创建通道
  23. Channel channel = connection.createChannel();
  24.  
  25. //消费者声明队列
  26. channel.queueDeclare(SMS_QUEUE, false, false, false, null);
  27. //消费者队列绑定 路由
  28. channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "log.*");
  29. //消费者监听消息
  30. DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
  31. //重写监听方法
  32. @Override
  33. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
  34. throws IOException {
  35. String msg = new String(body,"UTF-8");
  36. System.out.println("短信消费者获取生产者消息"+msg);
  37. }
  38. };
  39. channel.basicConsume(SMS_QUEUE,true, defaultConsumer); //绑定队列 事件监听
  40.  
  41. }
  42. }
  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.rabbitmq.client.DefaultConsumer;
  9. import com.rabbitmq.client.Envelope;
  10. import com.rabbitmq.client.AMQP.BasicProperties;
  11. import com.toov5.utils.MQConnectionUtils;
  12.  
  13. //邮件消费者
  14. public class ConsumerEmailTopic {
  15. private static final String EMAIL_QUEUE ="email_queue_topic";
  16. //交换机名称
  17. private static final String EXCHANGE_NAME = "my_topic";
  18. public static void main(String[] args) throws IOException, TimeoutException {
  19. System.out.println("邮件消费者启动");
  20. //建立MQ连接
  21. Connection connection = MQConnectionUtils.newConnection();
  22. //创建通道
  23. Channel channel = connection.createChannel();
  24.  
  25. //消费者声明队列
  26. channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);
  27. //消费者队列绑定 路由
  28. channel.queueBind(EMAIL_QUEUE, EXCHANGE_NAME, "log.email");
  29. //消费者监听消息
  30. DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
  31. //重写监听方法
  32. @Override
  33. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
  34. throws IOException {
  35. String msg = new String(body,"UTF-8");
  36. System.out.println("邮件消费者获取生产者消息"+msg);
  37. }
  38. };
  39. channel.basicConsume(EMAIL_QUEUE,true, defaultConsumer); //绑定队列 事件监听
  40.  
  41. }
  42. }

可以看到两个消费者都可以接收到

2.换成 “#”

生产者:

  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.toov5.utils.MQConnectionUtils;
  9.  
  10. //生产者 交换机类型 producerFanout类型
  11. public class TopicProducer {
  12. //交换机名称
  13. private static final String EXCHANGE_NAME = "my_topic";
  14. public static void main(String[] args) throws IOException, TimeoutException {
  15. //建立MQ连接
  16. Connection connection = MQConnectionUtils.newConnection();
  17. //创建通道
  18. Channel channel = connection.createChannel();
  19. //生产者绑定交换机
  20. channel.exchangeDeclare(EXCHANGE_NAME, "topic"); //交换机名称 交换机类型
  21. String routingKey="log.email.sms"; //消息只会给邮件类型的
  22. //创建对应的消息
  23. String msString = "my_Routing_destination_msg"+routingKey;
  24. //通过频道 发送消息
  25. System.out.println("生产者投递消息:"+msString);
  26. channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
  27. //关闭通道 和 连接
  28. channel.close();
  29. connection.close();
  30. }
  31.  
  32. }

消费者:

  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.rabbitmq.client.DefaultConsumer;
  9. import com.rabbitmq.client.Envelope;
  10. import com.rabbitmq.client.AMQP.BasicProperties;
  11. import com.toov5.utils.MQConnectionUtils;
  12.  
  13. //邮件消费者
  14. public class ConsumerSMSTopic {
  15. private static final String SMS_QUEUE ="sms_queue_topic";
  16. //交换机名称
  17. private static final String EXCHANGE_NAME = "my_topic";
  18. public static void main(String[] args) throws IOException, TimeoutException {
  19. System.out.println("短信消费者启动");
  20. //建立MQ连接
  21. Connection connection = MQConnectionUtils.newConnection();
  22. //创建通道
  23. Channel channel = connection.createChannel();
  24.  
  25. //消费者声明队列
  26. channel.queueDeclare(SMS_QUEUE, false, false, false, null);
  27. //消费者队列绑定 路由
  28. channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "log.#");
  29. //消费者监听消息
  30. DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
  31. //重写监听方法
  32. @Override
  33. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
  34. throws IOException {
  35. String msg = new String(body,"UTF-8");
  36. System.out.println("短信消费者获取生产者消息"+msg);
  37. }
  38. };
  39. channel.basicConsume(SMS_QUEUE,true, defaultConsumer); //绑定队列 事件监听
  40.  
  41. }
  42. }
  1. package com.toov5.topic;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.rabbitmq.client.DefaultConsumer;
  9. import com.rabbitmq.client.Envelope;
  10. import com.rabbitmq.client.AMQP.BasicProperties;
  11. import com.toov5.utils.MQConnectionUtils;
  12.  
  13. //邮件消费者
  14. public class ConsumerEmailTopic {
  15. private static final String EMAIL_QUEUE ="email_queue_topic";
  16. //交换机名称
  17. private static final String EXCHANGE_NAME = "my_topic";
  18. public static void main(String[] args) throws IOException, TimeoutException {
  19. System.out.println("邮件消费者启动");
  20. //建立MQ连接
  21. Connection connection = MQConnectionUtils.newConnection();
  22. //创建通道
  23. Channel channel = connection.createChannel();
  24.  
  25. //消费者声明队列
  26. channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);
  27. //消费者队列绑定 路由
  28. channel.queueBind(EMAIL_QUEUE, EXCHANGE_NAME, "log.email");
  29. //消费者监听消息
  30. DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
  31. //重写监听方法
  32. @Override
  33. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
  34. throws IOException {
  35. String msg = new String(body,"UTF-8");
  36. System.out.println("邮件消费者获取生产者消息"+msg);
  37. }
  38. };
  39. channel.basicConsume(EMAIL_QUEUE,true, defaultConsumer); //绑定队列 事件监听
  40.  
  41. }
  42. }

总结 “*” 匹配一个词   “#”匹配多个词

RabbitMQ之Exchange Topics模式的更多相关文章

  1. RabbitMQ之Exchange Direct模式

    场景: 生产者发送消息到交换机并指定一个路由key, 消费者队列绑定到交换机时要指定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那 ...

  2. RabbitMq 6种使用模式

    RabbitMQ的5种模式与实例 1.1 简单模式Hello World 功能:一个生产者P发送消息到队列Q,一个消费者C接收 生产者实现思路: 创建连接工厂ConnectionFactory,设置服 ...

  3. RabbitMQ的六种工作模式总结

    最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...

  4. 面试官:RabbitMQ有哪些工作模式?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又.又.又来面试了,还是老规 ...

  5. RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  6. Rabbitmq交换器Exchange和消息队列

    通常我们谈到队列服务, 会有三个概念: 发消息者.队列.收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者 ...

  7. 【RabbitMQ学习之二】RabbitMQ四种交换机模式应用

    环境 win7 rabbitmq-server-3.7.17 Erlang 22.1 一.概念1.队列队列用于临时存储消息和转发消息.队列类型有两种,即时队列和延时队列. 即时队列:队列中的消息会被立 ...

  8. RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  9. 手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端)

    原文地址:手把手一起入门 RabbitMQ 的六大使用模式(Java 客户端) 为什么使用 MQ? 在这里我就不多说了,无非就是削峰.解耦和异步.这里没有很多关于 MQ 的理论和概念,只想手把手带你一 ...

随机推荐

  1. 安装java运行环境

    1.查看java安装版本 执行命令java -version查看已安装java运行环境信息. 2.下载JDK 到sun官网下载需要的jdk版本,地址为:http://www.oracle.com/te ...

  2. sublime 插件篇

    添加插件 进入https://packagecontrol.io/installation   找到 或者 直接复制 import urllib.request,os,hashlib; h = '6f ...

  3. Android6.0系统添加那些新特性

        北京时间9月30日凌晨在美国旧金山举行2015年秋季新品公布会.在公布会上代号为"Marshmallow(棉花糖)"的安卓6.0系统正式推出.新系统的总体设计风格依旧保持扁 ...

  4. struts2在项目中的应用之下载

    文件下载是一个非经常见的功能,用struts2实现文件下载的步骤: 一)定义一个Action类.FileDownload.java package com.struts2.filedownload; ...

  5. 启动spring boot 异常

    再我搭建spring boot工程后,run application的时候抛出下面异常 Exception /slf4j-log4j12-.jar). If you are using WebLogi ...

  6. macOS 安装安卓模拟器 并用charles抓包

    mac上面安装安卓模拟器并能使用charles抓包软件调研 一.Genymotion 1.先下载Virtua Box虚拟机 https://www.virtualbox.org/wiki/Downlo ...

  7. 【Mac】之svn上传/删除文件命令

    创建文件后,进入文件夹下: ①先checkoutsvn地址: svn checkout https://xxxx:0000/svn/CM_B2B_Document/06_Testing/B2B_Ste ...

  8. 【转】【Mac系统】之Python版本切换、谷歌浏览器取消自动升级

    都是很有用的文章,本文都是转载文章,以便后续查阅: Mac Chrome浏览器取消自动升级(看这一篇就够了) <Mac修改默认python版本> <mac设置python版本切换,和 ...

  9. mybaits返回插入成功后的自增值

    mybaits返回插入成功后的自增值 在项目中,我们经常遇到这样的情况:insert语句成功后,需要自增的id值,这个时候,我们可以通过mybatis的 useGeneratedKeys 来实现,具体 ...

  10. resin 4.0 项目的配置

    前一篇我们了解了resin中配置数据源,依照不同项目的要求我们进行数据源的配置,如多个项目共享多个数据源,一个项目配置多个数据源,以下我们来看看项目的部署方式: 1.在一个host(虚拟主机)下配置一 ...