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!

