Native RabbitMQ Direct Exchange

RabbitMQ原生编程,直接交换器。

生产者:

/**
 * 原始生产者:
 *          1. 创建连接工厂
 *          2. 创建连接
 *          3. 创建信道
 *          4. 在连接中声明交换器的【名字】以及【类型】
 *          5. 创建队列
 *          6. 声明路由键的名字
 *          7. 将队列和交换器通过路由键绑定,目的是让交换器通过路由键投送到相应的队列中
 *          8. 发送消息
 *          9. 关闭连接,关闭信道,发送完毕
 *
 * create by zhangjianbing
 * time 2020年9月1日
 */
public class DirectProducer {

    public final static String EXCHANGE_NAME = "direct_exchange";

    public static void main(String[] args) throws IOException, TimeoutException {

        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("10.0.0.0");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("gogoblue");
        connectionFactory.setPassword("123456");
        connectionFactory.setVirtualHost("beijing");
        // 创建连接
        Connection connection = connectionFactory.newConnection();
        // 创建信道
        Channel channel = connection.createChannel();
        // 在信道中设置交换器,这里将第三个参数设置成true,交换器持久化
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT, true);

        // 声明一个普通的队列
        String queueName = "MESSAGE.CALLBACK.QUEUE";
        // 这里第二个参数设置成true,持久队列
        channel.queueDeclare(queueName, true, false, false, null);

        // 设置路由键
        String routeKey = "direct_routeKey";
        // 将队列和交换器通过路由键绑定在一起
        channel.queueBind(queueName, DirectProducer.EXCHANGE_NAME, routeKey);

        // 消息
        String message = "hello rabbit message queue";
        // 发送消息
        channel.basicPublish(EXCHANGE_NAME, routeKey, null, message.getBytes());
        System.out.println("消息发送成功。。。。。。");

        // 关闭信道和连接
        channel.close();
        connection.close();

    }

}

消费者:

/**
 * 原生消费者:
 *          仅仅关心去哪个队列消费
 *
 * create by zhangjianbing
 * time 2020年9月1日
 */
public class DirectConsumer {

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("1.1.1.1");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("beijing");
        connectionFactory.setPassword("123456");
        connectionFactory.setVirtualHost("beijing");
        // 创建连接
        Connection connection = connectionFactory.newConnection();
        // 创建信道
        Channel channel = connection.createChannel();

        System.out.println("正在等待消息。。。。。。");

        // 声明一个消费者
        final Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
                System.out.println("【路由键】:" + envelope.getRoutingKey() + "【消息内容】:" + new String(body, StandardCharsets.UTF_8));
            }
        };

        // 指定队列去消费
        String queueName = "MESSAGE.CALLBACK.QUEUE";
        // 消费者正式开始在指定队列上消费[队列名称、自动提交、消费者]
        channel.basicConsume(queueName, true, consumer);


    }

}
原文地址:https://www.cnblogs.com/zhangjianbing/p/13618168.html