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);
相关推荐
kyrie_sakura5 分钟前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
PC2005-cloud2 小时前
Rust学习笔记:控制流——if、loop、while、for与match
笔记·学习·rust
彧azz2 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先
IT笔记3 小时前
Rust 迭代器多级链式调用执行顺序笔记
开发语言·笔记·rust
kyrie_sakura3 小时前
python学习笔记14 -- FastAPI
笔记·python·学习·fastapi
来两个炸鸡腿3 小时前
【Datawhale2609】算子开发实战 task01-熟悉沐曦GPU
人工智能·学习·大模型
传奇开心果编程4 小时前
【Xilem 0.4 基础语法学与练】第11课(深入篇):为什么其他 Rust 框架不是一切皆设计图
学习·rust·前端框架
爱吃苹果的日记本4 小时前
JAVA十三(练习课)
java·学习
平凡シンプル4 小时前
TCP UDP 网络通信插件 SL-Uniplugin-Tcp-Udp
网络·学习·uniapp·记录
RisunJan5 小时前
【地球脉动】地球日报 · 2026-09-14(过去24小时,非头条视角)
学习