美文网首页
RabbitMQ简单队列(Simple Queues)

RabbitMQ简单队列(Simple Queues)

作者: 裂开的汤圆 | 来源:发表于2020-11-22 01:04 被阅读0次

官方文档

官方文档

简单队列模型

简单队列适用于有且仅有一个生产者与一个消费者的情形,耦合性高,生产者--对应消费者。如果我想有多个消费者消费消息,简单队列无法满足。并且当队列名变更时,得同时修改代码

生产者代码

public class Producer{
    private static final String QUEUE_NAME = "simple_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 获取连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        // 创建通道
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String msg = "hello simple queue";
        channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
        System.out.println("sending...");
        channel.close();
        connection.close();
    }
}

消费者代码

public class Rec {
    private static final String QUEUE_NAME = "simple_queue";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 获取连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        // 创建信道
        Channel channel = connection.createChannel();
        // 队列声明
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
        // 接收到消息后的回调函数
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };

        // 监听队列,每当队列中接收到新消息后会触发回调函数
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });

    }
}

工作队列模型

工作队列解决简单队列只能有一个消费者的问题,实际上工作队列就是启动了多个消费者。

相关文章

网友评论

      本文标题:RabbitMQ简单队列(Simple Queues)

      本文链接:https://www.haomeiwen.com/subject/rrxaqktx.html