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

  • 相关阅读:
    linux sort,uniq,cut,wc命令详解
    Linux IO实时监控iostat命令详解
    uniq命令
    四层和七层负载均衡的区别
    keepalived 和 heartbeat对比
    LVS+Keepalived实现负载均衡
    Lvs+heartbeat高可用高性能web站点的搭建
    使用 awk 过滤文本或文件中的字符串
    最全mysql的复制和读写分离
    伤不起
  • 原文地址:https://www.cnblogs.com/origalom/p/8335721.html
Copyright © 2020-2023  润新知