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);
相关推荐
JWASX1 分钟前
Java 转 go 学习 - 接口
学习·golang
by209999 分钟前
list 的使用:把节点、位置和操作联系起来的综合叙述(上)
数据结构·c++·笔记·list
I Am a robert girl11 分钟前
从零读懂世界模型的持续学习:一份组合式基准的源码级拆解
学习·具身智能·持续学习·灾难性遗忘·机器人学习·世界模型·组合式基准
扶风ff16 分钟前
练题簿在线免费刷题:刷题、背题、错题复习,一个小程序安排日常备考
学习·小程序
東隅已逝,桑榆非晚19 分钟前
数据结构队列
数据结构·笔记·学习
老王爱玩车19 分钟前
字符串和字符串函数
c语言·开发语言·数据结构·学习
扶风ff22 分钟前
练题簿在线免费刷题:共享题库、学习任务、在线考试,岗位培训更方便
学习·小程序
JWASX26 分钟前
Java 转 go 学习 - 并发编程(3)
学习·golang
传奇开心果编程40 分钟前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
欣欣之王来了1 小时前
5G网络基础:5G的核心特性,eMBB、uRLLC、mMTC的应用场景
网络·学习·计算机网络·安全·教程