RabbitMQ之路由 topic方式
来源:互联网 发布:js获取input选中的值 编辑:程序博客网 时间:2024/06/08 17:37
maven和工具类:http://blog.csdn.net/u014803081/article/details/73850657
生产者
import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.ydh.util.ConnectionFactoryUtil;import java.util.UUID;/** * *可以匹配一个标识符。 * #可以匹配0个或多个标识符。 */public class TopicPorducer { private static final String EXCHANGE_NAME = "ex_topic"; public static void main(String[] args) throws Exception { // 创建一个频道 Connection conn = ConnectionFactoryUtil.getInstance(); Channel channel = conn.createChannel(); // 声明转发器 channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); // 定义绑定键 String[] routing_keys = new String[] { "kernal.info", "cron.warning", "auth.info", "kernel.critical" }; for (String routing_key : routing_keys) { // 发送4条不同绑定键的消息 String msg = UUID.randomUUID().toString(); channel.basicPublish(EXCHANGE_NAME, routing_key, null, msg.getBytes()); System.out.println(" [x] Sent routingKey = " + routing_key + " ,msg = " + msg + "."); } channel.close(); conn.close(); }}
critical消费者
import com.rabbitmq.client.*;import com.ydh.util.ConnectionFactoryUtil;import java.io.IOException;//接收*.critical消息 public class TopicConsumerCritical { private static final String EXCHANGE_NAME = "ex_topic"; public static void main(String[] args) throws Exception { // 创建一个频道 Connection conn = ConnectionFactoryUtil.getInstance(); Channel channel = conn.createChannel(); // 声明转发器 channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); // 随机生成一个队列 String queueName = channel.queueDeclare().getQueue(); // 接收所有与kernel相关的消息 channel.queueBind(queueName, EXCHANGE_NAME, "*.critical"); System.out.println(" [*] Waiting for critical messages. To exit press CTRL+C"); Consumer consumer = new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); String routingKey = envelope.getRoutingKey(); System.out.println(" [x] Received routingKey = " + routingKey + ",msg = " + message + "."); } }; channel.basicConsume(queueName, true, consumer); }}
kernel消费者
import com.rabbitmq.client.*;import com.ydh.util.ConnectionFactoryUtil;import java.io.IOException;//接收kernel.*消息 public class TopicConsumerKernel { private static final String EXCHANGE_NAME = "ex_topic"; public static void main(String[] args) throws Exception { // 创建一个频道 Connection conn = ConnectionFactoryUtil.getInstance(); Channel channel = conn.createChannel(); // 声明转发器 channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC); // 随机生成一个队列 String queueName = channel.queueDeclare().getQueue(); // 接收所有与kernel相关的消息 channel.queueBind(queueName, EXCHANGE_NAME, "kernel.*"); System.out.println(" [*] Waiting for messages about kernel. To exit press CTRL+C"); Consumer consumer = new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); String routingKey = envelope.getRoutingKey(); System.out.println(" [x] Received routingKey = " + routingKey + ",msg = " + message + "."); } }; channel.basicConsume(queueName, true, consumer); }}
启动2个消费者,再启动发送4类消息生产者。观察接收到的消息,都收到对应的消息。可以看出使用topic类型的转发器,成功实现了多重条件选择的订阅。
阅读全文
0 0
- RabbitMQ之路由 topic方式
- RabbitMQ之路由 direct方式
- RabbitMQ之路由 fanout方式
- RabbitMQ之路由 headers方式
- 5.rabbitmq之topic
- RabbitMQ案例六之Topic
- RabbitMQ Exchange模式之Topic
- RabbitMQ之路由选择
- 4.rabbitmq之路由
- RabbitMQ学习之主题topic(java)
- RabbitMQ服务之路由篇
- RabbitMQ学习(五)之主题topic(java)
- RabbitMQ四种Exchange类型之Topic (Java)
- RabbitMQ四种Exchange类型之Topic(Erlang)
- Spring Boot RabbitMQ 入门(四)之 Topic交换器
- Spring Boot 整合 RabbitMQ 之 Topic转发模式 (二)
- RabbitMQ的Exchange 模式之topic(主题模式)
- RabbitMQ五种消息队列学习(六)--通配符模式(路由类型:Topic)
- javamail 发送邮件demo
- DevExpress.XtraEditors.VScrollBar 使用方法
- 全新Wijmo5中文学习指南正式上线
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- soapUI脚本发送xml
- RabbitMQ之路由 topic方式
- vs2008编译zlib库32位及64位
- C#奇妙的函数(1)-五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
- Code(一)排序算
- 【LeetCode】Longest Consecutive Sequence
- 存储过程的监控表DBA_proc_log
- iOS部分页面横竖屏解决方案
- Jquery给动态添加的元素绑定事件:live() delegate() on()
- 百倍增长,数据驱动——【云栖实录】面对正在崛起的移动支付,如何做好数据运营