RabbitMQ学习笔记-部署和使用

1、服务部署

1.1、Docker快速部署

复制代码
# 1. 拉取RabbitMQ镜像(带管理界面)

docker pull rabbitmq:3-management

# 2. 启动容器,映射端口(5672:AMQP协议端口;15672:管理界面端口)

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

# 3. 访问管理界面

打开浏览器,输入 http://服务器IP:15672,默认用户名/密码:guest/guest(生产环境需修改)

(这里我本地虚拟机不能连外网,因此无法演示)

1.2、集群部署

代码如下:

bash 复制代码
# 1. 安装RabbitMQ(CentOS示例)

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系统,RabbitMQ+HAProxy+KeepAlived集群搭建

2、项目落地

这里在我的个人项目中,实现了一个顾客登录后,异步记录登录日志并提示欢迎语的功能。

日志详情实体类、Mapper类、Service类创建与RabbitMQ无关,略过。

2.1 RabbitMQ的配置类编写

首先写一个RabbitMQConfig,声明交换机、队列、并将交换机和队列绑定:

java 复制代码
@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、声明消费者

再声明一个消费者,监听刚刚定义的队列:

java 复制代码
@Component

public class MessageConsumerUtil {

    @Autowired

    MemberLoginLogService memberLoginLogService;



//监听的队列名称

    @RabbitListener(queues = "hello_queue")

    public void sayHello(MemberDTO memberDTO) {

        System.out.println(memberLoginLogService.updateLoginLog(memberDTO) ? "登录记录写入成功" : "登录记录写入失败");

    }

}

2.3、消息发送

发送消息直接在业务层调用消息发送方法即可,需要指定交换机、路由键、消息内容:

java 复制代码
rabbitTemplate.convertAndSend("coupon.message","user.hello",memberDTO);
相关推荐
m4Rk_9 分钟前
【论文阅读】Agent记忆机制(112):MemFit——保留对话原文,用多路检索降低长期记忆成本
论文阅读·人工智能·学习·开源·github
kyrie_sakura41 分钟前
大模型学习17 大模型学习 - LangChain1_概述
学习
程序猿乐锅1 小时前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi
Wanderer X1 小时前
MiniMax-H3(ref2va)架构与推理方法笔记
笔记
深圳老胡1 小时前
STM32C562RET6 外部中断详解:从 EXTI 原理到 GPIO 外部中断实战
笔记·stm32·单片机·代码规范·1024程序员节
海绵宝宝转agent2 小时前
leetcodehot100个人题解
java·笔记·学习·算法
学长毕设12 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
小小de风呀16 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程16 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
Song_RsHt16 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务