目录
一、拉取运行镜像
1.1、拉取镜像环境
docker pull rabbitmq:3.13-management
1.2、运行镜像
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v rabbitmq-plugin:/plugins -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3.13-management
测试访问:
二、工作模式
引入pom依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.20.0</version>
</dependency>
2.1、消息的发送者
public class Producer {
public static void main(String[] args) {
//创建链接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置主机地址
connectionFactory.setHost("192.168.200.110");
//连接端口号
connectionFactory.setPort(5672);
//虚拟机主机名称默认 /
connectionFactory.setVirtualHost("/");
//连接用户名
connectionFactory.setUsername("guest");
//连接用户密码
connectionFactory.setPassword("123456");
Connection connection = null;
Channel channel = null;
try {
//创建连接
connection = connectionFactory.newConnection();
//创建连接频道
channel = connection.createChannel();
//申明队列
//String var1, 队列名称
// boolean var2, 是否持久化队列
// boolean var3, 是否独占本次连接,独占只能有一个消费者
// boolean var4, 是否不使用时删除队列
// Map<String, Object> var5 队列其他参数
channel.queueDeclare("simple_quest",true,false,false,null);
//发送的队列消息
String message = "你好,沸羊羊";
//String var1, 交换机名称,没有使用默认
// String var2, 路由key,简单模式可以传递队列
// AMQP.BasicProperties var3, 配置信息
// byte[] var4 消息内存
channel.basicPublish("","simple_quest",null,message.getBytes());
System.out.println("发送已完成:" + message);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (TimeoutException e) {
throw new RuntimeException(e);
}finally {
//关闭资源
try {
channel.close();
connection.close();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (TimeoutException e) {
throw new RuntimeException(e);
}
}
}
}
2.2、消息的接收者
public class Consumer {
public static void main(String[] args) {
//创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置主机地址
connectionFactory.setHost("192.168.200.110");
//连接端口号
connectionFactory.setPort(5672);
//虚拟机主机名称默认 /
connectionFactory.setVirtualHost("/");
//连接用户名
connectionFactory.setUsername("guest");
//连接用户密码
connectionFactory.setPassword("123456");
Connection connection = null;
Channel channel = null;
try {
//创建连接
connection = connectionFactory.newConnection();
//创建连接频道
channel = connection.createChannel();
//申明队列
//String var1, 队列名称
// boolean var2, 是否持久化队列
// boolean var3, 是否独占本次连接,独占只能有一个消费者
// boolean var4, 是否不使用时删除队列
// Map<String, Object> var5 队列其他参数
//channel.queueDeclare("simple_quest",true,false,false,null);
//接收消息
DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
@Override
//String consumerTag,标识
// Envelope envelope, 获取某些信息
// AMQP.BasicProperties properties, 配置信息
// byte[] body 数据
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("consumerTag:" + consumerTag);
System.out.println("Exchange:" + envelope.getExchange());
System.out.println("RoutingKey:" + envelope.getRoutingKey());
System.out.println("