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);
相关推荐
ctlover1 小时前
Python学习第 5 日
学习
2501_926978333 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
天天爱吃肉82183 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
IT19953 小时前
Dify 实战笔记:工作流核心玩法 + 开源 AI 应用全解析
笔记
MartinYeung54 小时前
[论文学习]OSReward:为跨平台计算机使用奖励模型建立标准化评估
人工智能·学习
dong1326974 小时前
Agent Skills学习笔记
笔记·学习
for_ever_love__5 小时前
iOS:网络请求再学习
网络·学习·ios·objective-c
世人万千丶5 小时前
鸿蒙Crash高级捕获与异常监控:全局异常兜底/崩溃栈解析/符号表还原/智能聚类/闭环修复
学习·机器学习·华为·数据挖掘·harmonyos·鸿蒙·聚类
Jul1en_5 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程