rabbitMQ学习笔记(六) topic类型消息。

2024-05-04 05:32

本文主要是介绍rabbitMQ学习笔记(六) topic类型消息。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一节中使用了消息路由,消费者可以选择性的接收消息。 但是这样还是不够灵活。 

比如某个消费者要订阅娱乐新闻消息 。 包括新浪、网易、腾讯的娱乐新闻。那么消费者就需要绑定三次,分别绑定这三个网站的消息类型。 如果新闻门户更多了,那么消费者将要绑定个更多的消息类型, 其实消费者只是需要订阅娱乐新闻,不管是哪个网站的新闻,都需要。 那么在rabbitMQ中可以使用topic类型。 模糊匹配消息类型。

模糊匹配中的 *代表一个  #代表零个或1个

示例:

[java]  view plain copy
  1. package com.zf.rabbitmq06;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import com.rabbitmq.client.Channel;  
  6. import com.rabbitmq.client.Connection;  
  7. import com.rabbitmq.client.ConnectionFactory;  
  8. import com.rabbitmq.client.ConsumerCancelledException;  
  9. import com.rabbitmq.client.QueueingConsumer;  
  10. import com.rabbitmq.client.QueueingConsumer.Delivery;  
  11. import com.rabbitmq.client.ShutdownSignalException;  
  12.   
  13. /** 
  14.  * 接收消息 
  15.  * @author zhoufeng 
  16.  * 
  17.  */  
  18. public class Recv06_01 {  
  19.   
  20.     public static void main(String[] args) throws IOException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {  
  21.           
  22.         ConnectionFactory connFac = new ConnectionFactory() ;  
  23.           
  24.         connFac.setHost("127.0.0.1");  
  25.           
  26.         Connection conn = connFac.newConnection() ;  
  27.           
  28.         Channel channel = conn.createChannel() ;  
  29.           
  30.           
  31.         String exchangeName = "exchange03";  
  32.           
  33.         channel.exchangeDeclare(exchangeName, "topic") ;  
  34.           
  35.         String queueName = channel.queueDeclare().getQueue() ;  
  36.           
  37.         //第三个参数就是type,这里表示只接收type01类型的消息。  
  38.         channel.queueBind(queueName, exchangeName, "#.type01") ;  
  39.           
  40.           
  41.         //配置好获取消息的方式  
  42.         QueueingConsumer consumer = new QueueingConsumer(channel) ;  
  43.         channel.basicConsume(queueName, true, consumer) ;  
  44.           
  45.         //循环获取消息  
  46.         while(true){  
  47.               
  48.             //获取消息,如果没有消息,这一步将会一直阻塞  
  49.             Delivery delivery = consumer.nextDelivery() ;  
  50.               
  51.             String msg = new String(delivery.getBody()) ;    
  52.               
  53.             System.out.println("received message[" + msg + "] from " + exchangeName);  
  54.         }  
  55.           
  56.     }  
  57.       
  58. }  


[java]  view plain copy
  1. package com.zf.rabbitmq06;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import com.rabbitmq.client.Channel;  
  6. import com.rabbitmq.client.Connection;  
  7. import com.rabbitmq.client.ConnectionFactory;  
  8.   
  9. /** 
  10.  * 发送消息 
  11.  * @author zhoufeng 
  12.  * 
  13.  */  
  14. public class Sender06 {  
  15.       
  16.     public static void main(String[] args) throws IOException {  
  17.           
  18.         ConnectionFactory connFac = new ConnectionFactory() ;  
  19.           
  20.         //RabbitMQ-Server安装在本机,所以直接用127.0.0.1  
  21.         connFac.setHost("127.0.0.1");  
  22.           
  23.         //创建一个连接  
  24.         Connection conn = connFac.newConnection() ;  
  25.           
  26.         //创建一个渠道  
  27.         Channel channel = conn.createChannel() ;  
  28.           
  29.         String exchangeName = "exchange03";  
  30.           
  31.         String messageType = "fs.type01";  
  32.           
  33.         channel.exchangeDeclare(exchangeName, "topic") ;  
  34.           
  35.         //定义Queue名  
  36.         String msg = "Hello World!";  
  37.           
  38.         //发送消息  
  39.         channel.basicPublish( exchangeName , messageType , null , msg.getBytes());  
  40.           
  41.         System.out.println("send message[" + msg + "] to "+ exchangeName +" success!");  
  42.           
  43.         channel.close();   
  44.         conn.close();   
  45.           
  46.     }  
  47.   
  48. }  

使用topic之后 。不管Sender端发送的消息类型是fs.type01 还是 xx.type01 还是 type01 ,消费者都会收到消息。

转载:http://blog.csdn.net/is_zhoufeng/article/details/10054423

这篇关于rabbitMQ学习笔记(六) topic类型消息。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958420

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在