RabbitMQ初探(一):概念及术语

2019-01-29  本文已影响19人  缘来是你ylh

1、AMQP:Advanced Message Queuing Protocol,是一个提供统一消息服务的应用层标准协议。

2、IPC(单一系统进程间通信) -> socket(不同机器间进程通信) -> AMQP(解决大型系统模块与组件间通信)

3、RabbitMQ 基于 Erlang 开发,是 AMQP 的一个开源实现。

4、RabbitMQ 系统架构图:

rabbitmq.jpg

生产者生产消息后不直接直接发到队列中,而是发到一个交换空间:Exchange,Exchange会根据Exchange类型和Routing Key来决定发到哪个队列中

5、名词术语:

还有几个隐式的概念:

此外,Exchanges 分三种类型:

direct

如果消息中的路由键和某个队列的路由键匹配的话,就将消息发送给该队列。

RabbitMQ 默认实现了一个名称为空的 direct 交换器,当声明一个队列时,如果没有指定交换器,那么 RabbitMQ 会把该队列自动绑定到这个默认的交换器,并以队列名称作为路由键。

在 RabbitMQ 中,支持在一个交换器上的多个队列配置相同的路由键。也就是说,对于绑定到交换器 Exchang_A 上的队列 Queue_1 和 Queue_2,可以设置同一个 routing_key(假设为 key_test)。当设置了 routing_key 为 key_test 的消息 Message 被发布到 Exchang_A 上时,Exchang_A 会将 Message 同时发送给 Queue_1 和 Queue_2 两个队列。

fanout

设置为 fanout 的交换器,会将消息发送给所有绑定到它身上的队列,类似于广播。

通常应用于需要对一条消息做不同反应的场景中。比如,在社交网站上,如果用户上传了一张照片,在更新用户相册的同时,还需要给用户一些积分奖励。那么这种情况,就可以使用 fanout 类型的交换器来实现。只需要将更新用户相册的队列和增加用户积分的队列绑定到同一个 fanout 交换器上即可。

topic

topic 类型的交换器,可以使来自不同源头的消息到达同一个队列,即支持在路由键中使用通配符。

在 RabbitMQ 中,. 把路由键分成多个部分,* 匹配特定位置的任意文本,# 则表示匹配所有规则。通过对这几种通配符的组合使用,就可以实现将不同来源的消息发送到同一个队列。比如,将 routing_key 设置为 *.error ,就可以将所有 routing_key 以 .error 结尾的消息发送到同一个队列。

上一篇下一篇

猜你喜欢

热点阅读