zoukankan      html  css  js  c++  java
  • Rabbitmq消息队列(五) 路由Routing

    1、简介

      在以前一章中,我们可以把一个消息广播给多个接收者。在这一章中,我们会增加一个功能:接收者能够只接收订阅消息中的一个子集。

    2、绑定

      在我们将交换机和队列进行绑定的时候,我们可以添加一个额外的参数:绑定建(routing_key)。绑定建的意义取决于交换机的类型,其中扇形交换机会忽略这个值。

      带绑定建的绑定的格式:

    1 channel.queueBind(queueName, EXCHANGE_NAME, "black");

    3、直连交换机(Direct exchange)

      我们使用的扇型交换机(fanout exchange)没有足够的灵活性,因为它能做的仅仅是广播, 而直连交换机会对绑定键(binding key)和路由键(routing key)进行精确匹配,从而确定消息该分发到哪个队列。

      

      在直连交换机中,多个绑定格式也是合法的:

      

    3、通过直连交换机发送消息

    1 Connection connection = factory.newConnection();
    2 Channel channel = connection.createChannel();
    3 
    4 channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT);
    5 channel.basicPublish(exchangeName, bindingKey, null, message.getBytes());
    6 System.out.println("发送消息:" + message);
    7 
    8 channel.close();
    9 connection.close();

     4、订阅接收消息

     1 Connection connection = factory.newConnection();
     2 Channel channel = connection.createChannel();
     3 
     4 channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT);
     5 String queueName = channel.queueDeclare().getQueue();       // 创建一个临时空队列
     6 channel.queueBind(queueName, exchangeName, bindingKey);           // 将交换机和队列进行绑定,告诉交换机将消息发送到我们的队列中
     7 
     8 Consumer consumer = new DefaultConsumer(channel) {
     9     @Override
    10     public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    11         String message = new String(body, "UTF-8");
    12 
    13         System.out.println("接收到消息:" + message);
    14     }
    15 };
    16 channel.basicConsume(queueName, true, consumer);

    5、运行测试

      这样,接收方就可以接收到指定绑定key的消息了。

  • 相关阅读:
    LAMP环境搭建博客
    PHP项目中经常用到的无限极分类函数
    在PHP项目中,每个类都要有对应的命名空间,为什么?
    一键解决docker pull hello-world的问题
    网盘10M速度下载-亿寻下载器
    《提问的智慧》
    idea出现 Error:(1, 1) java: 非法字符: 'ufeff'解决方式
    多线程的四种实现方式
    Java中的get()方法和set()方法
    Java构造器(构造方法/constructor)
  • 原文地址:https://www.cnblogs.com/origalom/p/8335721.html
Copyright © 2011-2022 走看看