原文:RabbitMQ入门教程(六):路由选择Routing

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

分享一个朋友的人工智能教程。比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看。

简介

本节主要演示使用直连接类型,将多个路由键绑定到同一个队列上。也可以将同一个键绑定到多个队列上(多重绑定multiple bindings),此时满足键的队列都能收到消息,不满足的直接被丢弃。

生产者

  1. public class Producer {
  2. @Test
  3. public void testBasicPublish() throws IOException, TimeoutException {
  4. ConnectionFactory factory = new ConnectionFactory();
  5. factory.setHost("127.0.0.1");
  6. factory.setPort(AMQP.PROTOCOL.PORT);
  7. factory.setUsername("mengday");
  8. factory.setPassword("mengday");
  9. Connection connection = factory.newConnection();
  10. Channel channel = connection.createChannel();
  11. // Routing 的路由规则使用直连接
  12. String EXCHANGE_NAME = "exchange.direct.routing";
  13. String[] routingKeys = {"debug", "info", "warning", "error"};
  14. for (int i = 0; i < 20; i++){
  15. int random = (int)(Math.random() * 4);
  16. String routingKey = routingKeys[random];
  17. String message = "Hello RabbitMQ - " + routingKey + " - " + i;
  18. channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8"));
  19. }
  20. // 关闭资源
  21. channel.close();
  22. connection.close();
  23. }
  24. }
  25.  
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

消费者1

  1. public class Consumer1 {
  2. @Test
  3. public void testBasicConsumer1() throws Exception{
  4. ConnectionFactory factory = new ConnectionFactory();
  5. factory.setHost("127.0.0.1");
  6. factory.setPort(AMQP.PROTOCOL.PORT);
  7. factory.setUsername("mengday");
  8. factory.setPassword("mengday");
  9. Connection connection = factory.newConnection();
  10. final Channel channel = connection.createChannel();
  11. String EXCHANGE_NAME = "exchange.direct.routing";
  12. // 生成一个随机的名称,queueDeclare()方法没有任何参数,当最后一个消费者断开时就会删除掉该队列,当消费者结束后可以看到队列就删除了
  13. String QUEUE_NAME = channel.queueDeclare().getQueue();
  14. channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
  15. // 在消费者端队列绑定
  16. // 将一个对列绑定多个路由键
  17. String[] routingKeys = {"debug", "info"};
  18. for (int i = 0; i < routingKeys.length; i++) {
  19. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, routingKeys[i]);
  20. }
  21. System.out.println("Consumer Wating Receive Message");
  22. Consumer consumer = new DefaultConsumer(channel){
  23. @Override
  24. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  25. String message = new String(body, "UTF-8");
  26. System.out.println(" [C] Received '" + message + "', 处理业务中...");
  27. }
  28. };
  29. channel.basicConsume(QUEUE_NAME, true, consumer);
  30. Thread.sleep(1000000);
  31. }
  32. }
  33.  
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

消费者2

  1. public class Consumer2 {
  2. @Test
  3. public void testBasicConsumer2() throws Exception{
  4. ConnectionFactory factory = new ConnectionFactory();
  5. factory.setHost("127.0.0.1");
  6. factory.setPort(AMQP.PROTOCOL.PORT);
  7. factory.setUsername("mengday");
  8. factory.setPassword("mengday");
  9. Connection connection = factory.newConnection();
  10. final Channel channel = connection.createChannel();
  11. String EXCHANGE_NAME = "exchange.direct.routing";
  12. // 生成一个随机的名称
  13. String QUEUE_NAME = channel.queueDeclare().getQueue();
  14. channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
  15. // 在消费者端队列绑定
  16. // 将一个对列绑定多个路由键
  17. String[] routingKeys = {"warning", "error"};
  18. for (int i = 0; i < routingKeys.length; i++) {
  19. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, routingKeys[i]);
  20. }
  21. System.out.println("Consumer Wating Receive Message");
  22. Consumer consumer = new DefaultConsumer(channel){
  23. @Override
  24. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  25. String message = new String(body, "UTF-8");
  26. System.out.println(" [C] Received '" + message + "', 处理业务中...");
  27. }
  28. };
  29. channel.basicConsume(QUEUE_NAME, true, consumer);
  30. Thread.sleep(1000000);
  31. }
  32. }
  33.  
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

运行结果

分享一个朋友的人工智能教程。比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看。

RabbitMQ入门教程(六):路由选择Routing的更多相关文章

  1. RabbitMQ入门教程——路由(Routing)

    绑定( Bindings)   之前的文章中我们已经创建过bindings,代码如下:         channel.QueueBind(queue: queueName, exchange: EX ...

  2. RabbitMQ入门教程(十六):RabbitMQ与Spring集成

    原文:RabbitMQ入门教程(十六):RabbitMQ与Spring集成 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  3. RabbitMQ入门教程(十):队列声明queueDeclare

    原文:RabbitMQ入门教程(十):队列声明queueDeclare 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...

  4. RabbitMQ入门教程(七):主题交换机Topics

    原文:RabbitMQ入门教程(七):主题交换机Topics 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  5. RabbitMQ入门教程(三):Hello World

    原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  6. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  7. 无废话ExtJs 入门教程六[按钮:Button]

    无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮“提交”与重置.如下所示代码区的第68行位置, butt ...

  8. PySide——Python图形化界面入门教程(六)

    PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...

  9. Elasticsearch入门教程(六):Elasticsearch查询(二)

    原文:Elasticsearch入门教程(六):Elasticsearch查询(二) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:h ...

随机推荐

  1. Linux命令-文本编辑(一)

    Linux命令-文本编辑(一) Linux col命令 Linux col命令用于过滤控制字符. 在许多UNIX说明文件里,都有RLF控制字符.当我们运用shell特殊字符">&quo ...

  2. C++入门经典-例5.3例5.4-输出int指针运算后的地址值

    1:代码如下: // 5.3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  3. Error:Connection activation failed: No suitable device found for this connection

    原文链接: https://blog.csdn.net/baiboya/article/details/80452822 ens33这个网卡一直无法激活,在网上找了半天,找到这个博主的文章,才解决,虽 ...

  4. Vue可自定义tab组件

    在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间.     如何 ...

  5. spark 笔记 10: TaskScheduler相关

    任务调度器的接口类.应用程序可以定制自己的调度器来执行.当前spark只实现了一个任务调度器) )))))val createTime = System.currentTimeMillis()clas ...

  6. 浏览器端-W3School-JavaScript-HTML DOM:HTML DOM Event 对象

    ylbtech-浏览器端-W3School-JavaScript-HTML DOM:HTML DOM Event 对象 1.返回顶部 1. HTML DOM Event 对象 实例 哪个鼠标按钮被点击 ...

  7. HTML5 WebRTC API无需网络获取本地IP

    因需求需要获取客户端的本机IP,国内资料基本上都是通过向一个IP网站发送请求并获取IP,这样有一定几率泄露自己的IP,在内网环境下也并不适用. 后来在stackoverflow上找到一种解决办法,用W ...

  8. 如何实现在Eclipse导入MySQL驱动包

    1 右键项目->Properties->Java Build Path->Libraries->Add External JARs...->mysql-connector ...

  9. UniEAP V4 WorkShop用户手册

    版权声明<UniEAP V4 WorkShop用户手册>的版权归东软集团(大连)有限公司所有.未经东软集团(大连)有限公司的书面准许,不得将本手册的任何部分以任何形式.采用任何手段(电子的 ...

  10. 用Node开发桌面应用:NW.js和Electron

    NW.js和Electron对比:[http://tangiblejs.com/posts/nw-js-electron-compared] NW.js:[https://nwjs.io/] Elec ...