博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rabbitMQ学习笔记(六) topic类型消息。
阅读量:5350 次
发布时间:2019-06-15

本文共 3372 字,大约阅读时间需要 11 分钟。

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

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

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

示例:

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 zhoufeng16  *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 }
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 zhoufeng12  *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.121         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 ,消费者都会收到消息

转载于:https://www.cnblogs.com/jianliang-Wu/p/5684887.html

你可能感兴趣的文章
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>