RabbitMQ (一)基础概念

1 使用场景

  • 系统解耦

  • 异步

  • 削峰

2 核心概念

  • vhost:虚拟主机

  • broker::消息服务进程,包含 exchange 和 queue

  • exchange: 交换器。负责根据路由规则转发消息

  • queue:消息队列。存储消息的地方,请求“缓冲区”,实现削峰

  • producer:消息生产者,发送消息到 交换器

  • consumer:消息消费者,从消息队列获取消息并消费

  • routingKey:路由标识,producer发送消息时指定,用于匹配queue

  • bindingKey:消息队列与交换器绑定时指定的key,用于与消息的routingKey比对

3 exchange交换器类型

1 direct:当消息的routingKey与队列绑定exchange指定的bindingKey 完全一致时,exchange将消息存储到对应的queue

2 fanout:发布订阅,交换器将消息转发到所有与之绑定的queue上,此时消息生产者不能决定消息发往哪里,完全由交换器决定

3 topic:通配符匹配。通配符有 *# 两个

* :匹配一个字符,比如 a.* 匹配 a.bingo ,不匹配 a.b.bingo

#: 匹配多个字符,比如 a.# 匹配 a.xx.yy

4 headers:该类型交换器的路由规则使用消息头部携带的键值来匹配,而不使用routingKey

1 交换器与消息队列绑定时,指定键值对信息

2 生产者发送消息时,指定消息的头部信息

headers交换器的匹配模式有 whereAll(全部匹配)whereAny(部分匹配) 两种模式

4 工作模式

1 Hello World 模式

点对点模式,一个队列只有一个消费者

2 Work queue 模式

工作队列模式,一个队列由多个消费者并行进行消费。默认情况下rabbitMQ使用 Round-robin 的方式分发消息给消费者。

3 Publish/Subscribe 模式

发布订阅模式,通常使用 fanout 类型的交换器实现,消息转发到与交换器绑定的所有消息队列上。

4 routing 模式

精确匹配路由模式。当routingKey(发送消息时指定的key)与bindingKey(队列绑定交换器时指定的key)完全匹配时,交换器将消息投递到对应的队列。

1 如上图所示,一个队列可多次绑定同一个交换器,并指定不同的 bindingKey

2 多个队列绑定同一个交换器时可指定相同的bindingKey,此时工作模式与发布订阅类似,如下图所示

5 Topic 模式

通配符匹配模式。

6 Rpc 模式

远程调用,请求/响应模式。客户端发出消息后,同步等待直到获取服务端响应的内容后才返回。工作流程大致如下:

  1. 客户端启动时,创建一个匿名的排他 回调队列,服务端响应的信息将投递到该队列

  2. 客户端发送rpc请求时,设置 reply_tocorrelation_idreply_to 用于指定回调队列,correlation_id 用于识别回调队列中的消息对应的是哪一个请求(确定请求源)

  3. 客户端发送请求到 rpc_queue 队列

  4. 当消息进入队列时,server消费消息,将响应信息投递到 reply_to 队列

  5. 客户端监听 reply_to 队列,当有消息到达时,通过 correlation_id 确定是否是自己请求的结果,如果是则获取信息并返回。

5 如何保证可靠性

1 发送方 publish comfirm 机制。

保证消息从producer到exchange

2 持久化及镜像部署

交换机持久化、队列持久化、消息持久化,保证rabbitMQ服务宕机时,相关的信息不丢失,服务重新上线后能恢复。

镜像部署保证rabbitMQ的高可用。

3 消费方 Ack 机制

确保消息消费成功。

参考博文:

https://www.rabbitmq.com/getstarted.html

https://juejin.cn/post/6978472783252717582

https://juejin.cn/post/6854573219253485575#heading-14

https://juejin.cn/post/6854573219253485575

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值