RabbitMQ-Docker安装

本文最后更新于:3 个月前

Docker安装RabbitMQ和HelloWord入门

1.安装

1.docker search rabbitmq //搜索镜像

image-20211223092829902

2.docker pull rabbitmq

//默认安装最新的版本 如果不安装最新版加上版本号即可

3.docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq

映射端口 名字自己随意取

4.docker ps

5.进入容器

docker exec -it 镜像ID /bin/bash

6.进入镜像后 开启 web 管理插件

rabbitmq-plugins enable rabbitmq_management

7.ctrl+p+q退出当前容器 让容器后台运行

8.浏览器进入 IP替换成自己服务器或者linux的 账号和密码默认都是guest

http://IP:15672/

image-20211223093934827

9.如果登录进不去可能是防火墙拦截了,需要开放15672端口,自己的虚拟机可以直接关闭防火墙

2.创建新用户

1.进入容器

docker exec -it 镜像ID /bin/bash

2.添加账号 admin和123456对应账号密码 随意设置

创建账号
rabbitmqctl add_user admin123456

3.给admin设置管理员角色

rabbitmqctl set_user_tags admin administrator

4.给admin设置权限

语法 :set_permissions [-p ]

命令:rabbitmqctl set_permissions -p “/“ admin “.“ “.“ “.*” //给admin用户设置所有权限

//用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限

设置完可以去浏览器登录

image-20211223094453233

当然也可以在web界面直接设置

image-20211223094604783

5.查看当前用户和角色

docker exec -it 镜像ID /bin/bash

rabbitmqctl list_users

image-20211223094804470

  1. 重置命令
    1.关闭应用的命令为

rabbitmqctl stop_app

2.清除的命令为

rabbitmqctl reset

3.重新启动命令为

rabbitmqctl start_app

3.RabbitMQ的HelloWord

1.导入依赖

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
<!--指定 jdk 编译版本-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!--rabbitmq 依赖客户端-->
<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>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
</dependencies>

2.编写入门程序(如果是云服务器,记得开启5672端口,不然连接不上)

1.生产者

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
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Producer {
//队列名称
public static final String QUEUE_NAME ="hello";

//发消息、
public static void main(String[] args) {
//创建一个链接工厂
ConnectionFactory factory = new ConnectionFactory();
//工厂IP 链接RabbitMQ的队列
factory.setHost("自己的服务器IP");
//用户名
factory.setUsername("admin");
//密码
factory.setPassword("123");
factory.setPort(5672); //默认端口

try {
//创建链接
Connection connection = factory.newConnection();
//获取信道 交换机可以省略 采用默认的交换机
//channel 实现了自动 close 接口 自动关闭 不需要显示关闭
Channel channel = connection.createChannel();
/*
生成一个队列
1.队列名称
2.队列里面的消息是否持久化(磁盘中) 默认情况消息存储在内存中
3.改队列是否只供一个消费者进行消费,是否进行消息共享,
true:只能一个消费者消费
false:可以多个消费者消费
4.是否自动删除 最后一个消费者端开连接后 该队列是否自动删除 如果是true自动删除 false不自动删除
*/
channel.queueDeclare(QUEUE_NAME,true,false,false,null);
//发消息
String message = "Hello RabbitMQ2";
/*
1.发送一个消费者
2.路由的Key值是哪个 本次是队列的名称
3.其他参数信息
*/
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("消息发送完成");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}

2.消费者

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
37
38
39
40
41
public class Consumer {
//队列名称
public static final String QUEUE_NAME ="hello";

//接受消息
public static void main(String[] args) throws IOException, TimeoutException {
//创建一个链接工厂
ConnectionFactory factory = new ConnectionFactory();
//工厂IP 链接RabbitMQ的队列
factory.setHost("自己的服务器IP");
//用户名
factory.setUsername("admin");
//密码
factory.setPassword("123");
factory.setPort(5672); //默认端口
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,true,deliverCallback,cancelCallback);
}
}

3.发送消息后即可在web上看到消息

image-20211223095539504

image-20211223095603218

image-20211223095355716

4.常见错误

Stats in management UI are disabled on this node

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#进入rabbitmq容器
docker exec -it {rabbitmq容器名称或者id} /bin/bash

#进入容器后,cd到以下路径
cd /etc/rabbitmq/conf.d/

#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf

#退出容器
exit

#重启rabbitmq容器
docker retart {rabbitmq容器id}

image-20211223141604710


本博客目前大部分文章都是参考尚硅谷或者马士兵教育的学习资料!