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增加了子队列的功能。
先开个头。。。
相关推荐
1. **隔离依赖**: 如果你的类依赖于其他服务或组件,Rhino.Mocks可以帮助你创建mock对象,以便在测试中只关注待测试代码,而无需考虑外部依赖的影响。 2. **测试驱动开发(TDD)**: 在TDD流程中,单元测试通常先于...
Rhino.Inside:registered:.Revit 请参阅 ,以获取有关如何使用该项目的更多信息。 下面列出的部分为想要为该项目或Wiki做出贡献的开发人员提供了有关代码库的更多信息。 概述 Rhino.Inside:registered:技术允许...
Rhino就是JavaScript引擎,它的目的就是实现Java与JavaScript的互操作性。rhino-1.7R1.jar Envjs一个纯js方式在无浏览器环境下模拟浏览器的行为。envjs-1.2.js 一般网站js中都会用到jauery,所以还用了jauery.js
#### 二、Rhino.Python 简介 Rhino是一款强大的三维建模软件,广泛应用于建筑、工程、工业设计等领域。它不仅提供了直观的界面和强大的建模工具,还内嵌了脚本语言支持,使得用户能够通过编写脚本来扩展其功能。...
rhino.3高级应用
压缩包内的文件“T-Splines 1.41 for Rhino.part1.rar”、“T-Splines 1.41 for Rhino.part2.rar”和“T-Splines 1.41 for Rhino.part3.rar”是分卷压缩文件,用于分块传输大文件。用户需要下载所有分卷并使用合适的...
rhino-1.7.14.jar下载
Rhino的jar包。 Rhino 是开源的 JavaScript 引擎,是完全基于 Java 实现,几乎可以使用 JavaScript 完成 Java 所有的工作。
标题 "t-splines.for.rhino.build.3.4" 暗示我们讨论的是一个针对Rhino软件的特定扩展或插件——T-Splines。T-Splines是一种高级建模技术,专为Rhino 3D建模软件设计,它允许用户创建更加自由流动、有机形状的设计,...
rhino-engine-1.7.13.jar
rhino-1.7.7.2是较新的版本,是一种用Java编写的Javascript解释器
1. **Rhino Level 1 v4.pdf**:这是Rhino的基础教程,针对初学者设计。它涵盖了Rhino的基础操作,包括界面介绍、基本几何体创建(如直线、曲线、平面等)、编辑工具(如移动、旋转、缩放)以及基本的建模技巧。通过...
Rhino_Python_Primer.pdf Forums: The RhinoPython community is very active and offers a wonderful resource for posting questions/answers and fi nding help on just about anything!: ...
rhino原创模型,数据不全,只是个新手练习建模的东西,学习建模思路,和方法。太难了,太难了不用拆除风扇,解决了矿用卡车风扇不易安装问题,排除安装过程中的安全隐患,提高矿用卡车的检修效率设备部件使用寿命,...
ICad3DP is the software for 3D sole design with multiple tools for intuitive and simple creation of the different sole elements from a digitised last and through reverse engineering....
Rhinoceros v5.0 SR11 犀牛建模软件,目前最新版,亲测可用! 官方简体中文版下载地址是: http://files.mcneel.com/dujour/exe/20150226/rh50_zh-cn_5.11.50226.17195.exe
rhinoJS 类做rhinoJS
【Rhino.Raft:与 RavenDB 一起使用的 Raft 协议的实现】 Rhino.Raft 是一个基于 C# 开发的实现,旨在与 RavenDB 集成,提供分布式系统的高可用性和一致性。Raft 协议是一种在分布式系统中用于管理日志复制的共识...
Android 中不在用webview的情况下 执行js代码并得到返回值
rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0....