RabbitMQ的基础使用 —— Direct模式(一)

在安装好RabbitMQ后,我们就来看一看基础的RabbitMQ的使用,首先我们先来看一看比较常用的Direct模式,其使用也是非常简单的,首先我们需要引入相关的依赖,如下:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.0.0</version>
</dependency>

注意: 5系列的版本最好使用JDK8及以上,低于JDK8建议使用4.x版本



然后我们先来看一看RabbitMQ的消息生产者,这里我们可以结合之前介绍的AMQP及RabbitMQ概论中的流程来看,这样会更加容易理解

public class DirectProducer {

    //交换器名称
    public static final String EXCHANGE_NAME = "logs";

    public static void main(String[] args) throws Exception {
        //创建连接,连接到RabbitMQ
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");
        Connection connection = connectionFactory.newConnection();

        //创建信道
        Channel channel = connection.createChannel();
        //创建交换器
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);

        //定义的业务日志消息级别,即作为路由键使用
        String[] logLevels = {"error", "warn", "info"};
        for (int i = 0; i < logLevels.length; i++) {
            String logLevel = logLevels[i];
            String msg = "Hello RabbitMQ";

			//发布消息,需要参数:交换器、路由键,其中以日志消息级别为路由键
            channel.basicPublish(EXCHANGE_NAME, logLevel, null, msg.getBytes(Charset.forName("UTF-8")));
        }
        channel.close();
        connection.close();
    }
}

消息发送出去后,我们还需要建立消费者去消费消息,上述生成者一共生成了error、warn、info三组消息,这里我们就来看看只消费error的消费者,如下:

public class ErrorConsumer {

    public static final String EXCHANGE_NAME = "logs";

    public static void main(String[] args) throws Exception {
        //创建连接,连接到RabbitMQ,与发送端一样
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");
        Connection connection = connectionFactory.newConnection();

        //创建信道
        Channel channel = connection.createChannel();
        //可不创建,由生产者进行创建
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);

        String queueName = "logError";  //声明一个队列名称
        String routingKey = "error";    //路由键名称

        //创建一个队列
        channel.queueDeclare(queueName, false, false, false, null);
        //将队列和交换器通过路由键进行绑定
        channel.queueBind(queueName, EXCHANGE_NAME, routingKey);

        //声明了一个消费者
        Consumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("Exchange: " + envelope.getExchange());
                System.out.println("RoutingKey: " + envelope.getRoutingKey());
                System.out.println("Content: " + new String(body, Charset.defaultCharset()));
                System.out.println("--------------");
            }
        };
        //消费者正式开始在指定队列上消费消息
        channel.basicConsume(queueName, true, consumer);
    }
}

然后我们就可以进行测试了,测试结果如下:
在这里插入图片描述




上述消费者只是消费了error的消息,即上述队列只绑定了一个路由键。万一我们想要消费多种消息,即队列上需要绑定多个路由键,那么应该如何进行设置呢,如下;


其实非常的简单,我们需要做一点点很多的变化,就是在绑定路由键的时候,多次绑定就可以了,如下:
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章