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

相关文章

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字