03 RabbitMQ:HelloWorld
- [1. 目标](#1. 目标)
- [2. 实现](#2. 实现)
-
- [2.1. 新建Spring Boot 项目](#2.1. 新建Spring Boot 项目)
-
- [2.1.1. 新建生产者(producer)项目](#2.1.1. 新建生产者(producer)项目)
- [2.1.2. 新建生产者(consumer)项目](#2.1.2. 新建生产者(consumer)项目)
- [2.2. 导入依赖](#2.2. 导入依赖)
- [2.3. 代码](#2.3. 代码)
-
- [2.3.1. 发送消息(producer)](#2.3.1. 发送消息(producer))
- [2.3.2. 接收消息(consumer)](#2.3.2. 接收消息(consumer))
1. 目标
用Java代码实现简单的 生产者发送消息,消费者接收消息 。
官网说明参见超链接:RabbitMQ tutorial - "Hello World!" | RabbitMQ
2. 实现
2.1. 新建Spring Boot 项目
2.1.1. 新建生产者(producer)项目
2.1.2. 新建生产者(consumer)项目
2.2. 导入依赖
xml
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.21.0</version>
</dependency>
2.3. 代码
2.3.1. 发送消息(producer)
java
package com.eyesmoon.producer.demo;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* @Description: 生产者
* @Author: M.
* @Date: 2024-07-30 16:40
*/
public class Producer {
private static final String QUEUE_NAME = "simple-queue";
private static final String EXCHANGE_NAME = "";
private static final String ROUTING_KEY = "simple-queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 设置主机地址
connectionFactory.setHost("192.168.188.129");
// 设置连接端口号:默认为 5672
connectionFactory.setPort(5672);
// 虚拟主机名称:默认为 /
connectionFactory.setVirtualHost("/");
// 设置连接用户名;admin
connectionFactory.setUsername("admin");
// 设置连接密码;123456
connectionFactory.setPassword("123456");
try (// 创建连接
Connection connection = connectionFactory.newConnection();
// 创建频道
Channel channel = connection.createChannel()){
/**
* 声明(创建)队列
* 参数1:队列名称
* 参数2:是否定义持久化队列(当 MQ 重启之后还在)
* 参数3:是否独占本次连接(若独占,只能有一个消费者监听这个队列且 Connection 关闭时删除这个队列)
* 参数4:是否在不使用的时候自动删除队列(就是在没有Consumer时自动删除)
* 参数5:队列其它参数
*/
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
/**
* 发送消息:消息内容
*/
String message = "你好,小兔子!";
/**
* 参数1:交换机名称,如果没有指定则使用默认Default Exchange
* 参数2:路由key,简单模式可以传递队列名称
* 参数3:配置信息
* 参数4:消息内容
*/
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());
System.out.println("生产者(Producer)已发送消息:" + message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
页面查看:
详细参数请查看 04 RabbitMQ:控制界面详解
Ready 变为了1,说明消息已经存放在队列中。
2.3.2. 接收消息(consumer)
java
package com.eyesmoon.consumer.demo;
import com.rabbitmq.client.*;
import java.nio.charset.StandardCharsets;
/**
* @Description: 消费者
* @Author: M.
* @Date: 2024-07-30 17:59
*/
public class Consumer {
private static final String QUEUE_NAME = "simple-queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
// 设置主机地址
connectionFactory.setHost("192.168.188.129");
// 设置连接端口号:默认为 5672
connectionFactory.setPort(5672);
// 虚拟主机名称:默认为 /
connectionFactory.setVirtualHost("/");
// 设置连接用户名;admin
connectionFactory.setUsername("admin");
// 设置连接密码;123456
connectionFactory.setPassword("123456");
try (// 创建连接
Connection connection = connectionFactory.newConnection();
// 创建频道
Channel channel = connection.createChannel()){
// 接收消息
DefaultConsumer consumer = new DefaultConsumer(channel) {
/**
* 回调方法,当收到消息后,会自动执行该方法
* @param consumerTag 标识
* @param envelope 获取一些信息,交换机,路由key...
* @param properties 配置信息
* @param body 数据
*/
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
System.out.println("consumerTag:" + consumerTag);
System.out.println("Exchange:" + envelope.getExchange());
System.out.println("RoutingKey:" + envelope.getRoutingKey());
System.out.println("properties:" + properties);
System.out.println("body:" + new String(body, StandardCharsets.UTF_8));
}
};
/**
* 监听消息
* 参数1:队列名称
* 参数2:是否自动确认(类似咱们发短信,发送成功会收到一个确认消息)
* 参数3:回调对象
*/
channel.basicConsume(QUEUE_NAME,true, consumer);
} catch (Exception e){
e.printStackTrace();
}
}
}
页面查看:
详细参数请查看 04 RabbitMQ:控制界面详解
Ready 变为了0,说明消息已经被消费。消息在队列中已经被删除。
本文隶属于 【个人专栏】:06 RabbitMQ 📋📋📋
到这里 03 RabbitMQ:HelloWorld 就结束了!!!🎉🎉🎉
后续接 04 RabbitMQ:控制界面详解 📣📣📣
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎