java exchangedeclare_Exchange服务器之RabbitMQ四种Exchange类型之Topic (Java)
Topic类型的Exchange是要进行路由键匹配的。此时需要通过路由键将队列绑定要一个交换器上。规则如下:
符号“#”匹配一个或多个词,例如:“logs.#”能够匹配到“logs.error”、“logs.info.toc”
符号“*”只能匹配一个词。例如:“logs.*” 只能匹配到“logs.error”,不能匹配到“logs.info.toc” 。
如下图:
下面就直接上代码吧!!
Consumer:
package topic;import java.io.IOException;import java.util.concurrent.TimeoutException;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;public class TopicConsumer {private static final String EXCHANGE_NAME = "exchange_topic";public static void main(String[] argv) throws IOException, TimeoutException {new ExchangeTopic("logs.info");new ExchangeTopic("logs.*");new ExchangeTopic("logs.#");}static class ExchangeTopic{public ExchangeTopic(final String routingKey) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();//rabbitmq监听IPfactory.setHost("192.168.249.128");//rabbitmq监听默认端口factory.setPort(5672);//设置访问的用户factory.setUsername("test");factory.setPassword("test");Connection connection = factory.newConnection();Channel channel = connection.createChannel();//声明路由名字和类型channel.exchangeDeclare(EXCHANGE_NAME, "topic", false, true, null);//队列名称String queueName = routingKey + ".queue";//创建队列channel.queueDeclare(queueName, false, false, true, null);//把队列绑定到路由上channel.queueBind(queueName, EXCHANGE_NAME, routingKey);System.out.println(" [routingKey = "+ routingKey +"] Waiting for msg....");Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body, "UTF-8");System.out.println("[routingKey = "+ routingKey +"] Received msg is '" + message + "'");}};channel.basicConsume(queueName, true, consumer);}}}
Producer:
package topic;import java.io.IOException;import java.util.concurrent.TimeoutException;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;public class TopicProducer {private static final String EXCHANGE_NAME = "exchange_topic";public static void main(String[] argv) throws Exception{new ExchangeTopic("logs.info", "logs Info test !!");new ExchangeTopic("logs.error", "logs error test !!");new ExchangeTopic("logs.error.toc", "logs error toc test !!");}static class ExchangeTopic{public ExchangeTopic(String routingKey,String message) throws IOException, TimeoutException{ConnectionFactory factory = new ConnectionFactory();//rabbitmq监听IPfactory.setHost("192.168.249.128");//rabbitmq监听默认端口factory.setPort(5672);//设置访问的用户factory.setUsername("test");factory.setPassword("test");Connection connection = factory.newConnection();Channel channel = connection.createChannel();//声明路由名字和类型channel.exchangeDeclare(EXCHANGE_NAME, "topic", false, true, null);channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes());System.out.println("[routingKey = "+routingKey+"] Sent msg is '" + message + "'");channel.close();connection.close();}}}
结果:
从结果中可以看出,路由键为"logs.info"只匹配到了Producer路由键是"logs.info"的信息,路由键为"logs.*"则匹配到了Producer路由键是"logs.info","logs.error"两条信息,而路由键为"logs.#"则匹配到了Producer路由键是"logs.info","logs.error","logs.error.toc"三条信息。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标系统运维之Exchange频道!
java exchangedeclare_Exchange服务器之RabbitMQ四种Exchange类型之Topic (Java)相关推荐
- headers java_RabbitMQ四种Exchange类型之Headers(Java)
版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156157.html Headers 类型的Exchanges是不处理路由键的,而是根据发 ...
- RabbitMQ 四种Exchange
AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列.生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机.先由Exchange来接收,然后Exchang ...
- RabbitMQ - 4种Exchange类型
在rabbitmq中,exchange有4个类型:direct,topic,fanout,header. direct exchange 此类型的exchange路由规则很简单: exchange在和 ...
- exchange java ews_Exchange服务器之使用EWS读取Exchange邮件
依赖的包 commons-codec-1.6.jar commons-lang3-3.1.jar commons-logging-1.1.1.jar ews-java-api-2.0.jar http ...
- [转载]java抽取word,pdf的四种武器
java抽取word,pdf的四种武器 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容? 我研究了一下,在这里总结一下抽取word,pdf的几种 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...
- 【零基础学Java】—final关键字与四种用法(二十九)
[零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...
- java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...
[填空题]One day, at the registrar's office of a college, I noticed how parents are behaving with their ...
最新文章
- 瀚思首发三款产品 推动大数据安全战略布局
- 重温C# clr 笔记总结
- Unity SRP自定义渲染管线 -- 3.Lights
- 吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之
- leetcode —— 面试题32 - III. 从上到下打印二叉树 III
- 【Flink】Flink 源码之ExecutionGraph
- 泰拉瑞亚试图加载不正确的_盘点那些著名的沙盒游戏?泰拉瑞亚堪称2D沙盒之王...
- WPF DataGrid 主从表 数据绑定方式
- 2018双十一苏宁20+篇技术干货全整理
- 在OpenGL中使用FreeImage库生成纹理
- VC运行库修复安装一键安装
- 如何将数据库文件进行压缩
- 设计一个具有大纯时延时间的一阶惯性环节的计算机控制系统,计算机控制课程设计――大纯时延一阶惯性环节温度控制系统....
- Rider+EmmyLua lua代码高亮设置
- 利用js实现页面刷新
- 2017级算法第二次上机-C.芸如的入学测试
- 《JOEL说软件》中文版翻译质量令人失望
- luminati 还原IP端口数据
- 多麦克风做拾音的波束_语音交互:先从麦克风阵列聊起
- 为什么INT_MIN不是直接写成-2147483648
热门文章
- JavaScript函数实例(一)
- json-smart 使用示例(推荐fastjson)
- 有趣的JavaScript数组
- fastdfs返回的url_FastDFS上传文件Demospringboot实现
- xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
- android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
- 属性篇(2)—If you love css …
- QTP自动化测试最佳实践
- day21 re模块
- 在ASP.NET MVC项目中使用React