• 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的消息了。

  • 相关阅读:
    spring揭秘读书笔记----spring的ioc容器之BeanFactory
    spring启动加载过程源码分析
    java线程数过高原因分析
    spring揭秘读书笔记----ioc的基本概念
    git merge rebase的区别及应用场景
    spring实现定时任务
    jetty.xml解析
    Hackthebox--------irked
    CTF之信息泄漏
    CTF web题型解题技巧
  • 原文地址:https://www.cnblogs.com/origalom/p/8335721.html
走看看 - 开发者的网上家园