Rhino.Queues随笔1 简介

 Rhino.Queues(http://ayende.com/blog/3480/rhino-queues)是一个消息队列工具,因为一个偶然的机会,从作者出版的书籍延伸到这个工具。

相对于其他的完整的队列工具,如zeormq、rabbitmq等消息队列,个人猜测他可能更像一个简单的演示队列原理的研究成果,虽然敝人对后面的几个消息队列只停留在了解的基础上。但是Rhino.Queues虽小,却五脏俱全,正好适合研究用。

因为没有研读过其他消息队列的源码,至此以后的基本都是基于对Rhino.Queues的理解,如有偏颇,敬请指正。

为了理解消息队列,暂且可以分为网络组件、存储组件、调度组件。

网络组件主要负责发送和接收消息,同时为了保证事务,一般也需要在网络组件配合,以实现类似于tcp/ip的握手协议,这个在Rhino.Queues的网络里面都有一定的体现。

存储组件主要负责消息队列消息的持久化和事务。当然也有消息队列只负责消息调度,而没有响应的持久化事务保证。消息存储组件可以使使用自定义的格式存储,也可以借助数据库来存储,后者可能相对方便点。设计一个自定义的存储需要考虑的问题太多,存储格式和检索修改就是需要在一定程度上要考虑的,同时数据的一致性也不容小觑,这些基本问题也是数据库最基本的问题,所以借助数据库可能算是比较合适的选择。Rhino.Queues使用的是window操作系统一般都内置的eset的数据库,据说微软的很多应用的存储就是基于这个数据库的,但是这个数据库并不是很广泛,而且使用方式也不同于我们平时使用的 sql标准的数据库,这也是看Rhino.Queues代码个人最费力的地方之一。同时需要注意,消息队列一般也是存储事务的操作事务日志,而不是借助数据库内置的日志,借助这些日志可以在消息队列恢复队列状态和数据时很有用。

调度组件是一个很难定义的组件,可能也是一个消息队列核心的所在。个人简单的理解,他负责一下的几个功能:

● 负责在启动时恢复上次关闭时的状态;
● 启动相应的服务(消息发送服务和消息接收服务,这里的接收和发送是针对底层消息队列间的交互);
● 负责与第三方的消息队列使用者交互(这里的发送和接收区别于消息队列内部的发送和接收);

这也是一般消息队列的基本流程,队列使用者发送消息一般都是先发送到消息队列的发送队列,然后通过消息队列的后台发送服务发送给目标对象,这简单的一个异步发送其实是分两个步骤进行的,第一次队列使用者发送消息然后提交事务,这里提交是指提交到消息队列的发送队列里面,直到后台发送服务发送成功,才会把这条消息置为发送成功,从发送队列“移除”。这里面涉及的细节居多,很多地方涉及到两段事务提交。大概流程如图1




 

从代码阅读的情况,Rhino.Queues,很多代码和结构都是为了保证两方队列的数据完整性。对于消息队列而言,基本都是围绕四个操作的数据事务性控制,即发送时发送到消息发送队列,然后发送服务发送到对方的接收端的事务、接收服务接收到数据的事务、接收已经在接收队列的数据的完整性。同时考虑到队列的方便以及易用性,Rhino.Queues增加了子队列的功能。

先开个头。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值