zoukankan      html  css  js  c++  java
  • 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);
      }
    }
  • 相关阅读:
    Java精通并发-自旋对于synchronized关键字的底层意义与价值分析以及互斥锁属性详解与Monitor对象特性解说【纯理论】
    线性表的链式存储结构
    Java精通并发-同步方法访问标志与synchronized关键字之间的关系
    Java精通并发-透过字节码理解synchronized关键字
    解决com.fasterxml.jackson.databind.JsonMappingException: No suitable
    mybatis绑定错误-- Invalid bound statement (not found)
    java.sql.SQLException: **** [SQLServer]对象名 "XXXX"无效
    Missing URI template variable 'XXXX' for method parameter of type String
    Unrecognized token 'XXXX': was expecting ('true', 'false' or 'null')
    ajax的data传参的两种方式
  • 原文地址:https://www.cnblogs.com/woms/p/7040862.html
Copyright © 2011-2022 走看看