rabbitMQ五种队列模式理解

RabbitMQ简介

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

要学习RabbitMQ最靠谱的地方当然是他的官网:https://www.rabbitmq.com/,其他地方难免有解读误差。所以学习的时候可以看看官网上的内容。

首先队列有几个概念要清楚

  1. 生产者producer:生产者向队列发送消息
  2. 消费者consumer:消费者从队列获取消息
  3. 交换机exchange:图中的x,订阅模式,生产者将消息发给交换机,由交换机选择把消息给谁
  4. 通道channel:创建了通道,才能和mq链接操作
  5. 队列queue:存消息的地方

他支持六种队列模式 队列模式

一、简单模式("Hello World!"

一个生产者一个消费者

生产则发送消息,消费者拿到消息,这个过程就结束了。

二、work模式(Work queues

一个生产者多个消费者

生产则发送一条消息,只能被一个消费者拿到。

如果生产者发送多条消息,消费者拿到的消息是不会重复的。

三、订阅模式( Publish/Subscribe

和work模式类似,一个生产者多个消费者,但是中间多了个交换机(exchange),一条消息可以被多个消费者获取。

生产者将消息发给交换机,交换机把消息分配给“已绑定”的消费者,前提是消费者和交换机绑定。

四、路由模式(Routing

和订阅模式类似,同样是一个生产者多个消费者,中间多了个交换机(exchange),一条消息可以被多个消费者获取。但是他在传递消息的时候多设置了一个key,消费者拿消息的时候也设置一个或多个key,key匹配才能拿消息。

例如:一号消费者设置的是insert,二号消费者设置的key是insert和update。假如生产者发送了一个key为insert的时候,2个消费者都能拿到数据。如果生产者发送了一个key为update,那么这时候只有2号消费者能拿到数据。

###五、通配符(话题)模式(Topics

和路由模式类似,同样是一个生产者多个消费者,中间多了个交换机(exchange),一条消息可以被多个消费者获取。同样是传key,但是他的key是可以模糊匹配的,*匹配一个单词,#匹配0或者多个单词。

例如:一号消费者设置的是item.#,二号消费者设置的key是item.*。一号消费者可以获取所有item开头的消息,二 号就只能匹配item.后面加一个词的消息。例如:消息是item.insert他可以获取,但是item.insert.update他就不能获取了。

六、RPC

暂时不做介绍

林明潭blog
请先登录后发表评论
  • latest comments
  • 总共0条评论