RabbitMQ学习笔记-部署和使用
1、服务部署1.1、Docker快速部署# 1. 拉取RabbitMQ镜像带管理界面 docker pull rabbitmq:3-management # 2. 启动容器映射端口5672AMQP协议端口15672管理界面端口 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management # 3. 访问管理界面 打开浏览器输入 http://服务器IP:15672默认用户名/密码guest/guest生产环境需修改 这里我本地虚拟机不能连外网因此无法演示1.2、集群部署代码如下# 1. 安装RabbitMQCentOS示例 yum install -y rabbitmq-server # 2. 启动服务并设置开机自启 systemctl start rabbitmq-server systemctl enable rabbitmq-server # 3. 启用管理插件和监控插件 rabbitmq-plugins enable rabbitmq_management rabbitmq_prometheus # 4. 创建管理员用户替换为自己的用户名和密码 rabbitmqctl add_user admin YourSecurePassword rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p / admin .* .* .* # 5. 配置集群多节点步骤以2个节点为例 # 节点1执行 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app # 节点2执行加入节点1集群替换为节点1IP rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit节点1IP rabbitmqctl start_app # 6. 配置镜像队列策略 rabbitmqctl set_policy ha-all ^ {ha-mode:all,ha-sync-mode:automatic}注意上面的命令只同步了队列和队列中的消息不同步交换机。因为交换机的配置信息会在集群中自动共享所以通常不需要通过镜像策略来同步。这里是参考的他人的集群配置教程我再贴一个自己写的教程Linux系统RabbitMQHAProxyKeepAlived集群搭建2、项目落地这里在我的个人项目中实现了一个顾客登录后异步记录登录日志并提示欢迎语的功能。日志详情实体类、Mapper类、Service类创建与RabbitMQ无关略过。2.1 RabbitMQ的配置类编写首先写一个RabbitMQConfig声明交换机、队列、并将交换机和队列绑定Configuration public class RabbitMQConfig { //声明直连交换机 Bean public DirectExchange directExchange() { return new DirectExchange(coupon.message, true, false); } Bean public Queue helloQueue() { return new Queue(hello_queue, true); } Bean public Binding bindingHelloQueue(Queue helloQue, DirectExchange directExchange) { return BindingBuilder.bind(helloQue).to(directExchange).with(user.hello); } }2.2、声明消费者再声明一个消费者监听刚刚定义的队列Component public class MessageConsumerUtil { Autowired MemberLoginLogService memberLoginLogService; //监听的队列名称 RabbitListener(queues hello_queue) public void sayHello(MemberDTO memberDTO) { System.out.println(memberLoginLogService.updateLoginLog(memberDTO) ? 登录记录写入成功 : 登录记录写入失败); } }2.3、消息发送发送消息直接在业务层调用消息发送方法即可需要指定交换机、路由键、消息内容rabbitTemplate.convertAndSend(coupon.message,user.hello,memberDTO);