1.RabbitMQ入门-概念、安装、配置

前言

RabbitMQ:高并发、高可用。

几年前学习过RabbitMQ,但是笔记没有做好,而且随着工作的深入,很多不理解的东西需要重新规划。

基础篇:概念、应用场景、基本安装。

核心篇:基本消息、工作队列、发布订阅、路由、主题。

进阶篇:普通集群、镜像队列、负载均衡、监控心跳。

1.消息队列概念和场景

1.1概念

消息队列全称MessageQueue,简称MQ。本质是一个队列,FIFO先进先出,只不过队列中存放的内容是message,从而称为消息队列(消息+队列)。

主要用途:不同服务server、进程process、线程thread之间通信。

Broker
Broker的概念来自与Apache ActiveMQ,通俗的讲就是MQ的服务器。
生产者和消费者
消息生产者Producer:发送消息到消息队列。
消息消费者Consumer:从消息队列接收消息。
点对点(线程池)
消息生产者向一个特定的队列发送消息,消息消费者从该队列中接收消息。
一条消息只有一个消费者能收到。
123.png
发布订阅
实际操作过程中,发布订阅消息模型中,支持向一个特定的主题Topic发布消息,0个或多个订阅者接收来自这个消息主题的消息。在这种模型下,发布者和订阅者彼此不知道对方。
必须先订阅,再发送消息,而后接收订阅的消息,这个顺序必须保证。
v2-11012861f81b53fe9c29a1942af7c8c4_720w
消息的顺序性保证
基于Queue消息模型,利用FIFO先进先出的特性,可以保证消息的顺序性。
消息的ACK确认机制
即消息的Ackownledge确认机制,为了保证消息不丢失,消息队列提供了消息Acknowledge机制,即ACK机制,当Consumer确认消息已经被消费处理,发送一个ACK给消息队列,此时消息队列便可以删除这个消息了。
如果Consumer宕机/关闭,没有发送ACK,消息队列将认为这个消息没有被处理,会将这个消息重新发送给其他的Consumer重新消费处理。
通过牺牲吞吐量获得实时性。
消息的持久化
消息的持久化,对于一些关键的核心业务来说是非常重要的,启用消息持久化后,消息队列宕机重启后,消息可以从持久化存储恢复,消息不丢失,可以继续消费处理。
对于生产者,将数据发送到消息队列,消息队列会保存多个副本,即使MQ服务器奔溃,重启仍能找到生产者的消息数据。
对于消费者,拉取到消息后,将返回一个信息给MQ告诉它已经获得了消息,MQ将保存相关数据,即使MQ服务器奔溃,重启仍能知道消费者已经获取了哪些数据,避免重复发送。
消息队列的异步处理
同步:消息的收发支持同步收发的方式。
异步:消息的收发同样支持异步方式:异步发送消息,不需要等待消息队列的接收确认;异步接收消息,以Push的方式触发消息消费者接收消息。
消息队列的事务支持
消息的收发处理支持事务,例如:在任务中心场景中,一次处理可能涉及多个消息的接收、处理,这处于同一个事务范围内,如果一个消息处理失败,事务回滚,消息重新回到队列中。

1.2场景

  • 削峰填谷
  • 应用解耦
  • 异步处理
  • 发布订阅
  • 消息驱动

需要根据业务场景选择合适的消息队列。

image-20240407002610665

2.RabbitMQ原理

Broker :即RabbitMQ的实体服务器。提供一种传输服务,维护一条从生产者到消费者的传输线路,保证消息数据能按照指定的方式传输。
Exchange :消息交换机。指定消息按照什么规则路由到哪个队列Queue。
Queue :消息队列。消息的载体,每条消息都会被投送到一个或多个队列中。
Binding :绑定。作用就是将Exchange和Queue按照某种路由规则绑定起来。
Routing Key:路由关键字。Exchange根据Routing Key进行消息投递。定义绑定时指定的关键字称为Binding Key。
Vhost:虚拟主机。一个Broker可以有多个虚拟主机,用作不同用户的权限分离。一个虚拟主机持有一组Exchange、Queue和Binding。
Producer:消息生产者。主要将消息投递到对应的Exchange上面。一般是独立的程序。
Consumer:消息消费者。消息的接收者,一般是独立的程序。
Connection:Producer 和Consumer 与Broker之间的TCP长连接。
Channel:消息通道,也称信道。在客户端的每个连接里可以建立多个Channel,每个Channel代表一个会话任务。在RabbitMQ Java Client API中,channel上定义了大量的编程接口。

121.png

3.Docker Desktop安装RabbitMQ

3.1安装Docker Desktop

安装Docker Desktop

地址:https://www.docker.com/products/docker-desktop/

image-20240407003342238

等待安装完成

image-20240407004218453

3.2Unexpected WSL errpr

运行Docker Desktop报错是因为电脑环境问题,请检查电脑是否开启支持虚拟化。

image-20240407004636462

打开任务管理器确认

image-20240407010444475

启用或关闭Windows功能查看并安装。

image-20240407010525241

image-20240407012349164

安装后重启,打开Docker Desktop正常。

image-20240407012402103

3.3安装RabbitMQ

# 查看docker版本
docker -v
# 运行rabbitmq
docker run -it -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management

docker run :创建一个新的容器并运行一个命令

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • --name="nginx-lb": 为容器指定一个名称;
  • --volume , -v: 绑定一个卷

image-20240407013031864

4.RabbitMQ管理界面

访问:http://localhost:15672/

默认账号:guest gutest

image-20240407201857609

描述、链接、信道、交换机、消息队列、管理员

image-20240407202234528

添加一个用户

image-20240407202539435

配置一个虚拟机

image-20240407202447362

配置完毕

image-20240407202509127

创作不易,感谢支持。

wxzf
posted @   peng_boke  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示