RabbitMQ消息队列中间件——“Hello World”入门

前面已经介绍过rabbitMQ环境的配置及安装了,这节就简单介绍一个demo,“Hello World”。

本文只是对官网给出的demo进行了中文翻译,大家也可以参考官网,不过全是英文的。



前言介绍

相关术语

生产者 Producer 扮演角色:向消息队列(消息缓冲区,也就是我们前面举例的邮局)中发送数据

消费者 Consumer 扮演角色:从消息队列(消息缓冲区,也就是我们前面举例的邮局)中获取数据

消息队列 rabbitmq 扮演角色:缓存消息,其本质是一消息缓冲区,其缓冲区的大小受主机内存和磁盘大小的限制,它可以缓存生产者发送来的消息,并且消费者可以从中获取消息。

“Hello World”简单案例

实现目的:生产者向队列中发送一条消息,消费者从队列中获取消息并打印出来。

pom依赖Maven坐标:

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

先来一个生产者,用于向队列中发送数据,Send.java。

public class Send {
    private final static String QUEUE_NAME = "hello";       // 声明一个队列名称
    private static String message = "Hello World!";     // 发送的消息

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();        // 创建连接工厂
        factory.setHost("localhost");       // 连接的主机地址
        Connection connection = factory.newConnection();        // 实例化一个连接对象
        Channel channel = connection.createChannel();       // 创建一个通道
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);        // 声明一个队列
        channel.basicPublish("",QUEUE_NAME, null, message.getBytes());      // 将消息发送到hello队列
        System.out.println("Send successfully : " + message);
    }
}

再来一个消费者,从队列中获取数据,Receive.java。

注意,因为队列会异步的向消费者发送数据,所以代码中以DeliverCallback对象作了回调,该对象将缓冲队列发来的消息。

public class Receive {

    private static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String s, Delivery delivery) throws IOException {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println("Receive " + message +" from queue!");
            }
        };

        /*DeliverCallback deliverCallback = (consumerTag, delivery) ->{
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println("Receive " + message +" from queue!");
        };*/
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
    }
}

分别运行两个程序,输出结果如下:

Receive Hello World! from queue!
经验分享 程序员 微信小程序 职场和发展