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)相关推荐

  1. headers java_RabbitMQ四种Exchange类型之Headers(Java)

    版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156157.html Headers 类型的Exchanges是不处理路由键的,而是根据发 ...

  2. RabbitMQ 四种Exchange

    AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列.生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机.先由Exchange来接收,然后Exchang ...

  3. RabbitMQ - 4种Exchange类型

    在rabbitmq中,exchange有4个类型:direct,topic,fanout,header. direct exchange 此类型的exchange路由规则很简单: exchange在和 ...

  4. 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 ...

  5. [转载]java抽取word,pdf的四种武器

    java抽取word,pdf的四种武器 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容? 我研究了一下,在这里总结一下抽取word,pdf的几种 ...

  6. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

  7. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  8. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...

  9. 【零基础学Java】—final关键字与四种用法(二十九)

    [零基础学Java]-final关键字与四种用法(二十九) 一.final关键字 final关键字代表最终.不可改变的 常见的四种用法: 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部 ...

  10. java语言变量分为_在Java语言中变量分为四种,分别是___________________________________________。_学小易找答案...

    [填空题]One day, at the registrar's office of a college, I noticed how parents are behaving with their ...

最新文章

  1. 瀚思首发三款产品 推动大数据安全战略布局
  2. 重温C# clr 笔记总结
  3. Unity SRP自定义渲染管线 -- 3.Lights
  4. 吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之
  5. leetcode —— 面试题32 - III. 从上到下打印二叉树 III
  6. 【Flink】Flink 源码之ExecutionGraph
  7. 泰拉瑞亚试图加载不正确的_盘点那些著名的沙盒游戏?泰拉瑞亚堪称2D沙盒之王...
  8. WPF DataGrid 主从表 数据绑定方式
  9. 2018双十一苏宁20+篇技术干货全整理
  10. 在OpenGL中使用FreeImage库生成纹理
  11. VC运行库修复安装一键安装
  12. 如何将数据库文件进行压缩
  13. 设计一个具有大纯时延时间的一阶惯性环节的计算机控制系统,计算机控制课程设计――大纯时延一阶惯性环节温度控制系统....
  14. Rider+EmmyLua lua代码高亮设置
  15. 利用js实现页面刷新
  16. 2017级算法第二次上机-C.芸如的入学测试
  17. 《JOEL说软件》中文版翻译质量令人失望
  18. luminati 还原IP端口数据
  19. 多麦克风做拾音的波束_语音交互:先从麦克风阵列聊起
  20. 为什么INT_MIN不是直接写成-2147483648

热门文章

  1. JavaScript函数实例(一)
  2. json-smart 使用示例(推荐fastjson)
  3. 有趣的JavaScript数组
  4. fastdfs返回的url_FastDFS上传文件Demospringboot实现
  5. xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
  6. android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  7. 属性篇(2)—If you love css …
  8. QTP自动化测试最佳实践
  9. day21 re模块
  10. 在ASP.NET MVC项目中使用React