Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

使用Docker搭建RabbitMQ环境

本次环境搭建使用的Docker,因为是学习嘛,Docker是在是太香了

注意了啊:咱这里要用managemen版本,千万别使用last版本的,management版本的才有管理界面

1、首先查询镜像

1
docker search rabbitmq:management

2、获取镜像

1
docker pull rabbitmq:management

3、运行镜像(已经映射好端口了)

1
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

访问地址

访问管理界面的地址就是 http://{自己的ip}:15672,可以使用默认的账户登录,用户名和密码都guest。

image-20211219222808824

补充小知识:如果想创建额外的账户,可以从这个管理界面创建,这个咱就不说了,下面列出在docker环境中添加新的RabbitMQ用户。

1
2
3
4
5
rabbitmqctl list_users #查看用户
rabbitmqctl add_user 用户名 密码 #添加用户
set_user_tags 用户名 administrator #设置用户角色
rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*" #设置用户权限
rabbitmqctl [--node <node>] [--longnames] [--quiet] set_permissions [--vhost <vhost>] <username> <conf> <write> <read> #给用户设置权限

RabbitMQ首战

1、首先咱创建一个maven工程

导入相应的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>

来看一下RabbitMQ的简单模型

image-20211219223231604

当然这只是一个相对简单的模型,RabbitMQ这一层里面还有相当多的东西

从图中我们不难看出我们首先得有一个消息的生产者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.bestrookie.rabbitmq.product;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer {
public static final String QUENUE_NAME = "hello";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.211.100");
factory.setUsername("rookie");
factory.setPassword("123456");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
/**
* 生成一个队列
* 1、队列名称
* 2、队列里面的消息是否持久化,默认情况消息存储在内存中
* 3、该队列是否只提供一个消费者进行消费 是否进行消息共享,true可以多个消费者消费,false 只能有一个消费者
* 4、是否自动删除,最后一个消费者断开链接以后,该队列是否自动删除,true自动删除 false 不自动删除
* 5、其他参数
*/
channel.queueDeclare(QUENUE_NAME,false,false,false,null);
String msg = "hello world";
/**
*
* 发送一条消息
* 1、发送到哪个交换机
* 2、路由的Key值是哪个 本次是队列的名称
* 3、其他参数
* 4、发送消息的消息体
*/
channel.basicPublish("",QUENUE_NAME,null,msg.getBytes());
System.out.println("消息发送成功=====");

}
}

image-20211219223530571

还得有一个消费者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.bestrookie.rabbitmq.product;
import com.rabbitmq.client.*;
public class Consumer {
public static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.211.100");
factory.setUsername("rookie");
factory.setPassword("123456");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//接收消息
DeliverCallback deliverCallback = (consumerTag,message)->{
System.out.println("未成功消费回调->" +
new String(message.getBody()));
};
CancelCallback cancelCallback = (consumerTag)->{
System.out.println("消费被取消");
};
/**
* 消费者接收消息
* 1、消费哪个队列
* 2、消费成功之后是否自动应答 true代表自动应答 false代表手动应答
* 3、接收消息的回调
* 4、消费者取消消费的回调
*/
channel.basicConsume(QUEUE_NAME,deliverCallback,cancelCallback);
}
}

image-20211219223543160

如果生产者再发送一条新的参数,这里会自动接收这条新的消息。

这就是一个简单hello world。

评论