MQ消息中间件使用总结

使用MQ来处理大并发情况下数据库操作频繁带来 的性能问题。

在业务执行时,不直接操作数据库,而是将数据通过MQ 传输,再MQ再调用自身的服务 操作数据库。MQ消息属队列,MQ包括消息发送方与消息接收方。

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。

 AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:
AMQ消息队列


基础概念
AMQP 有四个非常重要的概念:虚拟机(virtual host),交换机(exchange),队列(queue)和绑定(binding)。
虚拟机: 通常是应用的外在边界,我们可以为不同的虚拟机分配访问权限。虚拟机可持有多个交换机、队列和绑定。
交换机: 从连接通道(Channel)接收消息,并按照特定的路由规则发送给队列。
队列: 消息最终的存储容器,直到消费客户端(Consumer)将其取走。
绑定: 也就是所谓的路由规则,告诉交换机将何种类型的消息发送到某个队列中。
通常的操作流程是:
(1) 消费者: 创建信息通道。
(2) 消费者: 定义消息队列。
(3) 消费者: 定义特定类型的交换机。
(4) 消费者: 设定绑定规则 (包括交换机名称、队列名称以及路由键)。
(5) 消费者: 等待消息。
(6) 生产者: 创建消息。
(7) 生产者: 将消息投递给信息通道 (注明接收交换机名称和路由键)。
(8) 交换机: 获取消息,依据交换机类型决定是否匹配路由规则 (如需匹配,则对比消息路由键和绑定路由键)。
(9) 消费者: 获取并处理消息,发送反馈。
(10) 结束: 关闭通道和连接。

mq有4种不同的交换机类型:

直连交换机:Direct exchange
扇形交换机:Fanout exchange

主题交换机:Topic exchange

首部交换机:Headers exchange 

具体可参考博文:https://www.jianshu.com/p/469f4608ce5d

这篇博客中谈到了每种交换机与routingKey的对应关系。

知道什么是routingKey吗?

我在项目中用了spring-amqp的包,整个amqp被封装了一层,顶层是看不到诸如消息通道channel、rountingKey的,这些都被封装了。通过跟踪源码发现,实际我们定义的队列名queueName被当做routingKey来使用。

我们把定义的交换机与队列进行绑定,实际上就是交换机与routingKey进行绑定。

整个消息流转的流程是基于routingKey来进行的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章