• routing


     

    绑定是exchange和queue之间的一种关系,这可以简单的理解为:这个queue对这个exchange中的消息感兴趣。

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

    绑定可以使用一个额外的routingKey参数,为了避免和basic_publish参数混淆,我们称它为binding key。 我们可以这样来使用key创建一个绑定:

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

    binding key的含义取决于不同的exchange类型,我们之前使用的fanout类型会直接忽略这个值。

    direct类型的exchange的路由算法很简单——消息将会被传递到与它的routing key完全相同的 binding key的queue中

     1 package com.rabbitmq.www.publish_subscribe.direct;
     2 
     3 import java.util.Random;
     4 
     5 import com.rabbitmq.client.BuiltinExchangeType;
     6 import com.rabbitmq.client.ConnectionFactory;
     7 import com.rabbitmq.client.Connection;
     8 import com.rabbitmq.client.Channel;
     9 
    10 public class EmitLogDirect {
    11 
    12   private static final String EXCHANGE_NAME = "direct_logs";
    13   private final static String HOST_ADDR = "172.18.112.102";
    14 
    15   public static void main(String[] argv) throws Exception {
    16 
    17     ConnectionFactory factory = new ConnectionFactory();
    18     factory.setHost(HOST_ADDR);
    19     Connection connection = factory.newConnection();
    20     Channel channel = connection.createChannel();
    21     //申明exchange 类型direct
    22     channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
    23 
    24     for(int i=0;i<=10;i++){
    25         String message = "helloworld"+i;
    26         Random random = new Random();
    27         String severity = "info";
    28         if(random.nextInt(2)==1){
    29             severity = "debug";
    30         }
    31         //信息发送给申明的exchange,指明routingkey 
    32         channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8"));
    33         System.out.println(" [x] Sent '" + severity + "':'" + message + "'");
    34     }
    35 
    36     
    37 
    38     channel.close();
    39     connection.close();
    40   }
    41 
    42  
    43 }
    package com.rabbitmq.www.publish_subscribe.direct;
    
    import com.rabbitmq.client.*;
    
    import java.io.IOException;
    
    public class ReceiveLogsDirect {
    
      private static final String EXCHANGE_NAME = "direct_logs";
      private final static String HOST_ADDR = "172.18.112.102";
    
      public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(HOST_ADDR);
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
    
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
        String queueName = channel.queueDeclare().getQueue();
        //direct类型exchange申明routekey debug
          channel.queueBind(queueName, EXCHANGE_NAME, "debug");
        
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    
        Consumer consumer = new DefaultConsumer(channel) {
          @Override
          public void handleDelivery(String consumerTag, Envelope envelope,
                                     AMQP.BasicProperties properties, byte[] body) throws IOException {
            String message = new String(body, "UTF-8");
            System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'");
          }
        };
        channel.basicConsume(queueName, true, consumer);
      }
    }
  • 相关阅读:
    Hiho----无间道之并查集
    Linux之压缩与解压
    Linux之用户和用户组
    Linux之关机/重启命令及一些符号
    Linux之基本操作命令
    Linux之vi/vim
    解决eclipse中maven报错Failed to read artifact descriptor for xxxx:jar
    CentOS 7下 solr 单机版安装与配置
    CentOS 7下 Tomcat7 安装与配置
    CentOS 7下 JDK 1.7 安装与配置
  • 原文地址:https://www.cnblogs.com/woms/p/7040862.html
Copyright © 2020-2023  润新知