`
tyny
  • 浏览: 76225 次
  • 性别: Icon_minigender_1
  • 来自: 黄冈
社区版块
存档分类
最新评论

Rhino.Queues随笔2 网络发送流程

 
阅读更多

从理解的角度看Rhino.Queues来看,功能很齐全,但是有几个小地方还是略显粗糙。从发送服务和接收服务(其实就是一个发送线程和一个异步监听),他们原理是统一的,即有协调器负责实际的发送接收的存储操作和事务处理,但是他们的细节却大相径庭,不过这个可能由于接收操作略微复杂一点。

首先提一下Queue的存储表,他是使用微软的eset数据存储,跟发送和接收有直接关系的表有四个:消息发送表、历史消息发送表;消息接收表、历史消息接收表。

先看一下发送过程,发送服务主要是启动一个线程运行消息发送协调器QueuedMessagesSender的发送函数Send,这个函数的主要作用就是准备协调消息发送的一些操作,最后一切就绪,实例化发送操作Sender,负责实际的网络发送操作,即实际发送数据。

发送协调器的发送操作的细节

1、首先他会判断当前正在发送的操作是否多于5个,如果多于5个,则挂起秒然后重新循环准备发送;
2、从存储协调器获取发送消息队列管理器(SenderActions),然后利用SenderActions从消息发送表批量获取需要发送的消息,重置其状态为正在发送,以免重新发送;反之如果没有需要发送的消息,同上挂起1庙,然后重新循环发送;
3、新建网络发送操作Sender,同时绑定相应的事件,然后开始发送;

在Sender的发送过程中,根据他与接收消息队列的交互,相应的产生相应的状态,这些状态会激发消息发送协调器绑定相应的成功、失败、撤销事件。

● 成功状态:把发送的消息存到历史消息发送表,然后从消息发送表删除;
● 失败状态:把发送的消息在消息发送表重新置为可以发送;
● 撤销操作:撤销操作一般发送在成功之后,所以需要把发送的消息从历史表里面取出来重新存储到消息发送表中,同时其状态可以可以发送,即可以重新发送;

这些操作的实现就是在消息发送协调对象里面。队列管理器(QueueManager)初始化消息发送协调器QueuedMessagesSender)时提供了队列管理器(QueuedMessagesSender)和存储协调器(QueueStorage),所以和发送消息有关的状态信息表基本都可以在发送协调器里面看到。

接着可以讨论一下消息发送的过程于数据存储的简单的交互

● 首先在发送时获取发送消息时,就是通过存储协调器获取发送消息队列管理器获取需要发送的消息;
● 发送成功时,存储发送的消息到历史消息发送表,然后从消息发送表删除发送的消息;
● 发送失败时,修改发送消息表相应发送消息的状态为准备发送;
● 发送撤销时,从历史消息发送表取出发送的消息的数据存储到消息发送表,同时标志位为准备发送;

下图为发送成功的序列图



 

  • 大小: 47.8 KB
分享到:
评论

相关推荐

    Rhino.Mocks-3.6

    2. **预期(Expectations)**: 当使用Rhino.Mocks时,你可以设置对mock对象的期望,定义它们应该如何被调用。这包括调用的方法、参数、调用次数等。这些期望用于验证代码中的行为是否符合预期。 3. **记录和回放...

    rhino.inside-revit:这是Rhino.Inside:registered:.Revit的开源存储库

    Rhino.Inside:registered:.Revit 请参阅 ,以获取有关如何使用该项目的更多信息。 下面列出的部分为想要为该项目或Wiki做出贡献的开发人员提供了有关代码库的更多信息。 概述 Rhino.Inside:registered:技术允许...

    env.rhino.1.2.js

    Rhino就是JavaScript引擎,它的目的就是实现Java与JavaScript的互操作性。rhino-1.7R1.jar Envjs一个纯js方式在无浏览器环境下模拟浏览器的行为。envjs-1.2.js 一般网站js中都会用到jauery,所以还用了jauery.js

    rhino.3高级应用

    rhino.3高级应用

    rhino.python 教程 (英文)

    ### Rhino.Python 教程概览 #### 一、引言 《Rhino.Python 教程》是一本专为Rhino 5设计的指南,旨在帮助初学者掌握Rhino中Python编程的基础知识。该书由David Rutten撰写,最初是针对Rhino 4和VBScript编写的,...

    rhino-1.7.14.jar下载

    rhino-1.7.14.jar下载

    T-Splines 1.41 for Rhino.part1

    压缩包内的文件“T-Splines 1.41 for Rhino.part1.rar”、“T-Splines 1.41 for Rhino.part2.rar”和“T-Splines 1.41 for Rhino.part3.rar”是分卷压缩文件,用于分块传输大文件。用户需要下载所有分卷并使用合适的...

    t-splines.for.rhino.build.3.4

    标题 "t-splines.for.rhino.build.3.4" 暗示我们讨论的是一个针对Rhino软件的特定扩展或插件——T-Splines。T-Splines是一种高级建模技术,专为Rhino 3D建模软件设计,它允许用户创建更加自由流动、有机形状的设计,...

    rhino-1.7.7.1.jar(Rhino for java)

    Rhino的jar包。 Rhino 是开源的 JavaScript 引擎,是完全基于 Java 实现,几乎可以使用 JavaScript 完成 Java 所有的工作。

    rhino-engine-1.7.13.jar

    rhino-engine-1.7.13.jar

    rhino-1.7.7.2

    rhino-1.7.7.2是较新的版本,是一种用Java编写的Javascript解释器

    Rhino5_Python_Primer.pdf

    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.3dm

    rhino原创模型,数据不全,只是个新手练习建模的东西,学习建模思路,和方法。太难了,太难了不用拆除风扇,解决了矿用卡车风扇不易安装问题,排除安装过程中的安全隐患,提高矿用卡车的检修效率设备部件使用寿命,...

    犀牛建模官方简体中文版帮助文件.zip

    2. **Rhino Level 2 v4.pdf**:作为进阶教程,此文件深入介绍了Rhino的高级功能,如NURBS曲线和曲面建模、网格建模、渲染、动画以及参数化设计等。这些内容旨在帮助用户提升建模技能,解决复杂的设计问题。 3. **...

    rhino插件-Hare 2022.0.05

    rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0.05,应用于于幕墙等方面的一款小插件! rhino插件-Hare 2022.0....

    Rhino3D_v5.11.50226.17195_32bit_Patch 和谐文件(破解补丁)

    Rhinoceros v5.0 SR11 犀牛建模软件,目前最新版,亲测可用! 官方简体中文版下载地址是: http://files.mcneel.com/dujour/exe/20150226/rh50_zh-cn_5.11.50226.17195.exe

    Inescop Sole 3D v3.0.0.0 for Rhino.rar

    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....

    Rhino.Raft:与 RavenDB 一起使用的 Raft 协议的实现

    【Rhino.Raft:与 RavenDB 一起使用的 Raft 协议的实现】 Rhino.Raft 是一个基于 C# 开发的实现,旨在与 RavenDB 集成,提供分布式系统的高可用性和一致性。Raft 协议是一种在分布式系统中用于管理日志复制的共识...

    PyPI 官网下载 | compute_rhino3d-0.12.2.tar.gz

    在运维场景中,将`compute_rhino3d`集成到自动化流程中,可以帮助优化工作流,提高效率。例如,通过Jenkins或者Docker容器自动化测试和部署包含3D计算的项目,能够极大地减少手动操作的时间和错误。 总结起来,`...

    Android 不用webview 执行js代码 rhino-1.7.7.2.jar

    Android 中不在用webview的情况下 执行js代码并得到返回值

Global site tag (gtag.js) - Google Analytics