RabbitMQ学习笔记-HelloWorld

320 阅读1分钟

在IDEA中新建一个Maven工程,并添加 RabbitMQ Java client依赖

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

新建Send.java文件,先不要关心方法及每个参数的具体作用

public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

新建Recv.java文件

public class Recv {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages.");

        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 Server

brew services start rabbitmq

运行 Send.main(),控制台输出如下:

[x] Sent 'Hello World!'

运行Recv.main(),控制台输出如下:

 [*] Waiting for messages.
 [x] Received 'Hello World!'

简单概念

RabbitMQ是一个消息代理,负责接收和转发消息。

RabbitMQ

P代表消息的发送者(producer),比如上面的Send类。

C代表消息的接收者(consumer),比如上面的Recv类。

中间红色的图片代表消息队列(message queue)。消息队列可以通过名称标识,比如上面的"hello"。