注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

关于RabbitMQ,你可以知道的一些事(一)  

来自王潜   2015-02-09 16:48:49|  分类: 环境配置 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
基于AMQP(高级消息队列协议)一款可复用企业级消息系统
消息是系统与系统、模块与模块之间传递信息的一种手段。
消息中间件,独立的系统,降低了与业务系统的耦合。
消息队列需要做的就是有效和正确地管理接收发送消息。

  • 消息的传递流程:
RabbitMQ接收生产者生产的消息并确认,通过routing key在exchange中匹配规则,确认消息要进入的队列。消费者从队列中获取消息并确认。
  • 概念
  1. exchange:接收消息,并转发到绑定的队列。转发类型
direct:转发消息到routigKey指定的队列,类似完全匹配
topic:按规则转发消息(最灵活),类似模糊匹配
headers:(这个不知道)
fanout:转发消息到所有绑定队列
如果一个exchange后面没有绑定队列,那么消息到这个exchange后就相当于丢失了。
持久性:如果启用,交换器将会在server重启前都有效。
自动删除:如果启用,那么交换器将会在其绑定的队列都被删除掉之后自动删除掉自身。
惰性:如果没有声明交换器,那么在执行到使用的时候会导致异常,并不会主动声明。
  1. Queue 队列
队列是RabbitMQ内部对象,存储消息。相同属性的queue可以重复定义。
临时队列。channel.queueDeclare(),有时不需要指定队列的名字,并希望断开连接时删除队列。

队列的属性:

持久性:如果启用,队列将会在server重启前都有效。

自动删除:如果启用,那么队列将会在所有的消费者停止使用之后自动删除掉自身。

惰性:如果没有声明队列,那么在执行到使用的时候会导致异常,并不会主动声明。

排他性:如果启用,队列只能被声明它的消费者使用。

这些性质可以用来创建例如排他和自删除的transient或者私有队列。这种队列将会在所有链接到它的客户端断开连接之后被自动删除掉。它们只是短暂地连接到server,但是可以用于实现例如RPC或者在AMQ上的对等通信。4. RPC的使用是这样的:RPC客户端声明一个回复队列,唯一命名(例如用UUID),并且是自删除和排他的。然后它发送请求给一些交换器,在消息的reply-to字段中包含了之前声明的回复队列的名字。RPC服务器将会回答这些请求,使用消息的reply-to作为routing key(默认绑定器会绑定所有的队列到默认交换器,名称为“amp.交换器类型名”)发送到默认交换器。注意这仅仅是惯例而已,可以根据和RPC服务器的约定,它可以解释消息的任何属性(甚至数据体)来决定回复给谁。

  1. 消息传递
1. 消息在队列中保存,以轮询的方式将消息发送给监听消息队列的消费者,可以动态的增加消费者以提高消息的处理能力。

2. 为了实现负载均衡,可以在消费者端通知RabbitMQ,一个消息处理完之后才会接受下一个消息。

channel.basic_qos(prefetch_count=1)

注意:要防止如果所有的消费者都在处理中,则队列中的消息会累积的情况。

3. 消息有14个属性,最常用的几种:

deliveryMode:持久化属性

contentType:编码

replyTo:指定一个回调队列

correlationId:消息id

4. 消息生产者可以选择是否在消息被发送到交换器并且还未投递到队列(没有绑定器存在)和/或没有消费者能够立即处理的时候得到通知。通过设置消息的mandatory/immediate属性为真,这些投递保障机制的能力得到了强化。

5. 此外,一个生产者可以设置消息的persistent属性为真。这样一来,server将会尝试将这些消息存储在一个稳定的位置,直到server崩溃。当然,这些消息肯定不会被投递到非持久的队列中。

  评论这张
 
阅读(565)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016