本文最后更新于:3 个月前
Docker安装RabbitMQ和HelloWord入门
1.安装
1.docker search rabbitmq
//搜索镜像
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/
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 中所有资源的配置、写、读权限
设置完可以去浏览器登录
当然也可以在web界面直接设置
5.查看当前用户和角色
docker exec -it 镜像ID /bin/bash
rabbitmqctl list_users
- 重置命令
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
| <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> <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(); factory.setHost("自己的服务器IP"); factory.setUsername("admin"); factory.setPassword("123"); factory.setPort(5672);
try { Connection connection = factory.newConnection(); Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,true,false,false,null); String message = "Hello RabbitMQ2";
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(); 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("消息被中断" ); };
channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback); } }
|
3.发送消息后即可在web上看到消息
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}
|