zoukankan      html  css  js  c++  java
  • RabbitMQ知识点整理9-exchangeBind方法详解

    我们不仅可以将交换器与队列绑定,也可以将交换器与交换器绑定,后者和前者 RabbitMQ知识点整理8-queueBind方法详解 的用法如出一辙,相应的方法如下:

    1.Exchange.BindOk exchangeBind(String destination, String source, String routingKey) throws IOException;
    2.Exchange.BindOk exchangeBind(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException;
    3.void exchangeBindNoWait(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException;

    方法中的参数可以参考 RabbitMQ知识点整理6-exchangeDeclare方法详解 , 绑定之后,消息从source 交换器转发到 destination 交换器, 某种程度上来说destination 交换器可以看作一个队列

    package demo.java.web.amqp.rabbitmq.demo2;
    
    import java.io.IOException;
    import java.util.concurrent.TimeoutException;
    
    import org.junit.Test;
    
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    
    /**
     * 交换器与交换器绑定
     * 
     * @author jiangkd
     * @date 2020/10/12
     */
    public class ExchangeBindDemo {
    
        final private String IP_ADDRESS = "127.0.0.1";
        final private int PORT = 5672;
        final private String USERNAME = "root";
        final private String PASSWORD = "root123";
        final private String VIRTUALHOST = "/jiangkd";
    
        @Test
        public void exchangeBind() throws IOException, TimeoutException {
            //
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost(IP_ADDRESS);
            factory.setPort(PORT);
            factory.setVirtualHost(VIRTUALHOST);
            factory.setUsername(USERNAME);
            factory.setPassword(PASSWORD);
    
            // 创建连接
            Connection connection = factory.newConnection();
    
            // 创建信道
            Channel channel = connection.createChannel();
    
            // 定义交换器source和destination, 类型分别是direct和fanout
            channel.exchangeDeclare("source", "direct", true, false, null);
            channel.exchangeDeclare("destination", "fanout", true, false, null);
            // 绑定交换器
            channel.exchangeBind("destination", "source", "exKey");
            // 定义队列
            channel.queueDeclare("queue", true, false, false, null);
            // 绑定交换器和队列
            channel.queueBind("queue", "destination", "");
    
            // 发布消息
            channel.basicPublish("source", "exKey", null, "Hello World!".getBytes());
        }
    }

    生产者发送消息至交换器source 中,交换器source 根据路由键找到与其匹配的另一个交换器destination , 井把消息转发到destination 中, 进而存储在.destination 绑定的队列queue 中,参考图3-1

  • 相关阅读:
    由于版本依赖造成的YUM段错误
    CodeDom系列事件(event)定义和反射调用
    CodeSmith模板引擎系列二文件目录树
    F#初试打印目录文件树
    在IIS上SSL的部署和启动SSL安全
    CodeDom系列二程序基本结构符号三角形问题
    CodeDom系列目录
    CodeDom系列四Code生成
    CodeDom六实体类生成示例
    CodeDom系列五动态编译
  • 原文地址:https://www.cnblogs.com/no-celery/p/13803755.html
Copyright © 2011-2022 走看看