- 什么是 RabbitMQ?
RabbitMQ是一款开源的,Erlang编写的,消息中间件;
最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
可以用它来:解耦、异步、削峰。 - rabbitmq 的使用场景
(1)服务间异步通信
(2)顺序消费
(3)定时任务
(4)请求削峰 - RabbitMQ 基本概念
Broker: 简单来说就是消息队列服务器实体。
Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue: 消息队列载体,每个消息都会被投入到一个或多个队列。
Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key: 路由关键字,exchange根据这个关键字进行消息投递。
VHost: vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的queue、exchange 和 binding 等,
但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,
vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。
Producer: 消息生产者,就是投递消息的程序。
Consumer: 消息消费者,就是接受消息的程序。
Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务由
Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路。 - RabbitMQ的工作模式
simple模式(即最简单的收发模式)
(1)消息产生消息,将消息放入队列
(2)消息的消费者(consumer) 监听消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中
删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失,这里可以设置
成手动的ack,但如果设置成手动ack,处理完后要及时发送ack消息给队列,否则会造成内存溢出)。
work工作模式(资源的竞争)
(1)消息产生者将消息放入队列消费者可以有多个,消费者1,消费者2同时监听同一个队列,消息被消费。
C1 C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息(隐患:高并发情况下,默认会产生某
一个消息被多个消费者共同使用,可以设置一个开关(syncronize) 保证一条消息只能被一个消费者使用)。
publish/subscribe发布订阅(共享资源)
(1)每个消费者监听自己的队列;
(2)生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。
routing路由模式
(1)消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符
(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;
(2)根据业务功能定义路由字符串
(3)从系统的代码逻辑中获取对应的功能字符串,将消息任务扔到对应的队列中。
(4)业务场景:error 通知;EXCEPTION;错误通知的功能;传统意义的错误通知;客户通知;利用key路由,可
以将程序中的错误封装成消息传入到消息队列中,开发者可以自定义消费者,实时接收错误;
topic 主题模式(路由模式的一种)
(1)星号井号代表通配符
(2)星号代表多个单词,井号代表一个单词
(3)路由功能添加模糊匹配
(4)消息产生者产生消息,把消息交给交换机
(5)交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
(在我的理解看来就是routing查询的一种模糊匹配,就类似sql的模糊查询方式) - 如何保证RabbitMQ消息的顺序性?
拆分多个 queue(消息队列),每个 queue(消息队列) 一个 consumer(消费者),就是多一些 queue(消息队列)而已,确实是麻烦点;
或者就一个 queue (消息队列)但是对应一个 consumer(消费者),然后这个 consumer(消费者)内部用内存队列做排队,
然后分发给底层不同的 worker 来处理。
RabbitMQ知识点(一)
最新推荐文章于 2023-06-21 14:07:01 发布