MacamV3软件说明书03消息中间件.docx
- 文档编号:8519347
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:579.96KB
MacamV3软件说明书03消息中间件.docx
《MacamV3软件说明书03消息中间件.docx》由会员分享,可在线阅读,更多相关《MacamV3软件说明书03消息中间件.docx(15页珍藏版)》请在冰豆网上搜索。
MacamV3软件说明书03消息中间件
第三章消息中间件
3.1消息中间件知识
现在的软件系统通常都庞大而复杂,需要由各种不同的组件分工协作,这些组件可能分布于不同的计算机上,为了使它们能够相互通信,协同工作,就需要提供一个允许它们进行通信(不考虑它们之间的差异)的层。
该层被称作中间件,它允许独立开发且运行于不同网络平台上的软件组件彼此交互。
在概念上,中间件位于应用程序层与平台层(操作系统和底层网络服务)之间,分布于不同网络节点上的应用程序使用中间件提供的接口进行通信。
中间件可分为以下几类:
●基于远程过程调用(RemoteProcedureCall,RPC)的中间件,允许一个应用程序中的过程调用远程应用程序中的过程,就好像它们是本地调用一样。
该中间件实现一个查找远程过程的链接机制并使调用方能够以透明方式使用这些过程。
以前,这种类型的中间件处理基于过程的程序;现在,它还包括基于对象的组件。
●基于对象请求代理(ObjectRequestBroker,ORB)的中间件,使应用程序的对象能够在异类网络之间分布和共享。
●基于面向消息的中间件(MessageOrientedMiddleware,MOM)的中间件使分布式应用程序可以通过发送和接收消息来进行通信和交换数据。
所有这些模型都使一个软件组件可以通过网络影响另一个组件的行为。
它们的区别在于基于RPC和ORB的中间件会创建紧密耦合组件系统,而基于MOM的系统允许组件进行更松散的耦合。
在基于RPC或ORB的系统中,当一个过程调用另一个过程时,它必须等待被调用的过程返回才能执行其他操作。
正如前面所提到的,在这些模型中,中间件在一定程度上充当超级链接程序,在网络上查找被调用过程,并使用网络服务将函数或方法参数传递到被调用过程,然后返回查找结果。
基于MOM的系统允许通过异步交换消息来进行通信,如下图所示。
面向消息的中间件使用消息传送提供者来协调消息传送操作。
MOM系统的基本元素有客户端、消息和MOM提供者,后者包括API和管理工具。
使用MOM系统,客户端可以进行API调用,以便将消息发送到由提供者管理的目标。
该调用会调用提供者服务以路由和传送消息。
在发送消息之后,客户端会继续执行其他工作,并确信在接收方客户端检索该消息之前,提供者一直保留该消息。
基于消息的模型与提供者的协调耦合在一起,使得创建松散耦合的组件系统成为可能。
这样的系统可以继续可靠地工作,即使在有个别组件或连接失败时也不会停机。
让消息传送提供者协调客户端之间的消息传送还有一个优点,那就是可以通过添加管理接口来监视和调整性能。
这样,客户端应用程序便不必关心发送、接收和处理消息之外的任何问题。
对于互操作性、可靠性、安全性、可扩展性和性能之类的问题,应当由管理员通过编码实现MOM系统来解决。
3.2消息中间件概述
MacamMOM软件是独立的中间件产品,它包括三个组成部分:
代理,管理工具,客户端API。
以下介绍MacamMOM软件的一些基本概念和使用到的技术。
代理
代理是消息传送提供者,是消息服务的核心,它以可靠的方式路由和传送消息,对用户进行验证并收集用来监视性能的数据。
●路由和传送消息,代理将传入的消息放入各自的目标并管理传入和传出这些目标的消息流。
●为了提供可靠的传送,代理使用持久性存储来保存状态信息和持久性消息,直到它们被接收。
如果代理或连接失败,所保存的信息使代理可以恢复代理的状态并重试操作。
●要为所交换的数据提供安全性,代理需要使用经过验证的连接。
代理使用并管理一个系统信息库,该系统信息库保存有关用户的数据的信息。
代理对请求服务的用户进行验证。
客户端API
客户端API被封装在一个独立的库中。
可以通过这些API来创建连接,通过连接在代理中创建目标和目标的用户,并且发送消息到目标中,或者从目标中接收消息。
管理工具
代理需要一个可视化的工具来管理,包括以下功能
●启动和配置代理。
●管理代理连接以及管理代理资源。
●管理目标
●管理目标用户
●管理消息
●填充和管理用户系统信息库。
消息传送模式
一个客户端既可以是消息生成者,也可以是消息使用者,消息在代理中进行中转。
代理通过目标来维护消息,消息生成方向代理所管理的目标发送一条消息,消息使用方访问该目标以使用此消息。
MacamMOM中的目标分为两类:
队列和主题,分别对应于两种消息传送模式:
点对点和发布/订阅模式。
下图为消息传送模式示意图:
在点对点模式中,消息生成方被称为发送者,而使用方则被称为接收者。
它们通过被称为队列的目标来交换消息:
发送者生成队列中的消息;而接收者则使用队列中的消息。
下图显示了点对点模式中最简单的消息传送操作。
MyQueueSender向队列目标MyQueue1发送Msg1。
然后,MyQueueReceiver从MyQueue1获得该消息。
下图显示了一个更为复杂的点对点消息传送图,以说明该模式中的可能情况。
两个发送者MyQSender1和MyQSender2使用同一连接向MyQueue1发送消息。
MyQSender3使用另一连接向MyQueue1发送消息。
在接收端,MyQReceiver1使用MyQueue1中的消息,MyQReceiver2和MyQReceiver3共享一个连接以使用MyQueue1中的消息。
该图略为复杂,说明了有关点对点消息传送的其他几点。
●多个生成方可向一个队列发送消息。
生成方可共享连接或使用不同连接,但它们均可访问同一队列。
●多个接收者可使用一个队列中的消息,但每条消息只能由一个接收者使用。
所以,Msg1、Msg2和Msg3由不同接收者使用。
●接收者可共享连接或使用不同连接,但它们均可访问同一队列。
●发送者和接收者之间不存在时间上的相关性:
客户端发送一条消息后,无论接收者是否正在运行,正常连接后都能取出该消息。
●消息在队列中的放置顺序与发送顺序相同,但它们的使用顺序则取决于消息失效期、消息优先级以及使用消息时是否使用选择器等因素。
在发布/订阅模式中,消息生成方被称为发布者,而消息使用方则被称为订户。
它们通过称为主题的目标来交换消息:
发布者生成主题中的消息;订户则订阅主题并使用主题中的消息。
下图显示了发布/订阅模式中的简单消息传送操作。
MyTopicPublisher向目标MyTopic中发布Msg1。
然后,MyTopicSubscriber1和MyTopicSubscriber2均从MyTopic接收Msg1的副本。
订户可以是非长期的,也可以是长期的。
代理会为所有活动订户保留消息,但对于非活动订户,则只为那些长期订户保留消息。
下图显示了更为复杂的发布/订阅消息传送图,以说明该模式提供的可能情况。
多个生成方向Topic1目标发布消息。
多个订户使用来自Topic1目标的消息。
除非订户使用选择器来过滤消息,否则每个订户均可获得发布到所选主题的所有消息。
在此图中,MyTSubscriber2已过滤掉Msg2。
该图略为复杂,说明了有关发布/订阅消息传送的其他几点。
●多个生成方可向一个主题发布消息。
生成方可共享连接或使用不同连接,但它们均可访问同一主题。
●多个订户可使用一个主题中的消息。
订户可检索发布到一个主题中的所有消息,除非它们使用选择器过滤掉消息或消息在使用之前已过期。
●订户可共享连接或使用不同连接,但它们均可访问同一主题。
●长期订户可能处于活动状态,也可能处于非活动状态。
在它们处于非活动状态时,代理会为它们保留消息。
●消息发布到主题的顺序与发送顺序相同,但它们的使用顺序则取决于消息失效期、消息优先级以及使用消息时是否使用选择器等因素。
●发布者与订户之间存在时间上的相关性:
主题订户只能使用在它创建订阅后发布的消息。
发布/订阅模型的主要优势在于它允许向订户广播消息。
目标的用户
目标分为队列和主题,目标中的消息由消息生成者产生,由消息使用者使用。
在队列中,消息生成者被称为发送者,而使用者则被称为接收者。
在主题中,消息生成者被称为发布者,而使用者则被称为订户。
但是,不管是消息生成者还是消息使用者,它们都称为目标的用户。
长期订户
可以为主题创建长期订户。
即使订户变为非活动状态,代理也会为这些类型的订户保留消息。
由于代理必须维护订户的状态并在订户被重新激活后恢复消息传送,因此,代理必须能够在给定订户的订阅期内识别该订户。
订户标识是根据创建该订户的ClientID属性以及创建订户时指定的订户名构造的。
持久性消息服务
消息分为持久性和非持久性消息,系统保证只将持久性消息传送并成功使用一次。
如果消息服务失败,持久性消息不会丢失。
系统保证最多将非持久性消息传送一次。
如果消息服务失败,非持久性消息将丢失。
为了确保在将持久性消息传送至使用方之前,代理不会将它们丢失,在消息到达物理目标时,代理必须将消息放入持久性存储中,例如数据库。
如果代理由于某种原因发生故障,它可以在以后恢复此消息并将此消息传送至相应的使用方。
此外,代理必须永久存储长期订阅。
否则,当代理发生故障时,就无法向长期订户传送消息;当有消息到达主题目标后,长期订户就会变为活动状态。
要保证成功传送消息,消息传送应用程序必须将消息指定为持久性消息,并将它们传送给具有长期订阅的主题目标或传送给队列目标。
验证和授权
当客户端请求连接时,必须提供用户名和密码。
代理会将指定的名称和密码与存储在用户系统信息库中的名称和密码进行比较。
密码在从客户端传送到代理的过程中,将使用消息摘要(MD5)散列进行编码。
防止系统崩溃
可以设置一些属性,以防止向代理传入过多的消息并防止代理内存不足。
代理使用以下二级内存保护,使消息服务在资源不足时仍可正常运行:
目标限制、系统范围限制。
理想情况下,如果目标限制和系统范围限制设置得当,则应当不会达到紧急系统内存阈值。
目标消息限制
可以设置用来管理每个目标的内存和消息流的目标属性。
例如,可指定目标允许的生成方的最大数量、目标允许的消息的最大数量或最大大小以及任何一条消息的最大大小。
还可以指定在达到上述任何限制时代理的响应方式:
降低生成方的速度、丢弃最旧的消息、丢弃优先级最低的消息或者拒绝最新的消息。
系统范围消息限制
还可以使用属性来设置应用于代理中所有目标的限制:
可以指定消息总数和所有消息占用的内存。
如果达到了任何系统范围消息限制,代理将拒绝新消息。
可靠性传输
消息传送在两个跃点上进行:
代理从生成方获得消息;客户端从代理的目标获得消息。
因此,在下面的三个阶段,消息可能丢失:
在至代理的跃点上,当代理发生故障时在代理的内存中以及在代理至使用方的跃点上。
可靠传送可保证在传送过程中上述任一阶段都不会失败。
由于当代理失败时非持久性消息总是会丢失,因此可靠传送仅适用于持久性消息。
使用了两种机制来确保可靠传送:
●客户端可使用确认机制来确保成功地生成和使用消息。
●代理可以在持久存储中存储消息,这样,如果代理在消息被使用前失败,它可以检索存储的消息副本并重试操作。
消息包格式定义
每条消息必须按固定格式封装。
消息包含几个预定义字段,下表中列出并介绍了这些字段。
字段
描述
MSDestination
指定消息要发送到的目标对象的名称,在这里用名称的唯一标识(整数)来表示,该标识在创建目标(队列或主题)时由代理生成
MSDeliveryMode
指定消息是否为持久性消息,持久性消息将被写入数据库中,以防止代理发生故障
MSExpiration
指定消息的到期时间,等于-1时该消息将一直有效
MSPriority
指定消息的优先级,范围为0(低)到9(高)
MSType
消息类型
MSReplyTo
指定使用方应发送回复到的目标对象名称
MSPropertyLen
消息属性值的总字节长度,消息属性用于实现过滤器,每个属性值以属性名=属性值的形式出现,多个属性值之间使用分号间隔,如:
性别=’男’;年龄=27;民族=’汉族’
(注意字符串值两边要用单引号)
MSProperty
一个或多个属性值对,分号间隔(总共占用MSPropertyLen字节)
MSLen
消息实体字节长度
MSData
消息实体(总共占用MSLen字节)
MSDeliveryMode决定了消息传送的可靠性。
该字段指示一条消息是否为持久性消息。
●保证只将持久性消息传送并成功使用一次。
如果消息服务失败,持久性消息不会丢失。
●保证最多将非持久性消息传送一次。
如果消息服务失败,非持久性消息将丢失。
使用选择器过滤消息
消息使用方可以利用消息选择器,使代理只传送那些属性匹配特定选择标准的消息。
该标准在创建使用方时指定。
选择器使用类似SQL的语法来匹配消息属性。
例如,
color=’red’
size>10
把选择器传给代理时(创建用户时指定选择器),每个值对之间用分号间隔,如:
color=’red’;size>10
请求-回复模式
可以在一个连接中同时包含生成方和使用方。
此外,允许使用临时目标来实现消息传送操作的请求-回复模式。
消息生成方必须执行以下操作才能设置请求-回复模式:
1.创建使用方可发送回复的临时目标。
2.在要发送的消息中,将消息头的MSReplyTo字段设置为该临时目标。
消息使用方在处理消息时,会检查消息的MSReplyTo字段,以确定是否需要回复并向指定目标发送回复。
当生成方只有在确保请求已处理后才能继续时,此模式非常有用。
下图说明了向主题中发送消息并接收临时队列中的回复的请求/回复模式。
如图所示,MyTopicPublisher生成Msg1并将它发送到目标MyTopic。
MyTopicSubsriber1和MyTopicSubscriber2接收该消息并向MyTempQueue发送回复,MyTQReceiver从MyTempQueue中检索该回复。
临时目标的存在时间只能与创建它们的连接的存在时间一样长。
任何生成方都可以向临时目标发送消息,但只有创建目标的客户端所创建的那些使用方能够访问临时目标。
以持久、可靠的方式传送消息的步骤如下:
消息生成
1.客户端API通过连接将消息从消息生成方传送到代理。
消息处理
2.代理从连接中读取消息并将此消息放入相应的目标中。
3.代理将(持久性)消息放入数据存储中。
4.代理向消息生成方的客户端确认已收到消息。
6.代理将消息从目标写入适当的连接。
消息使用
7.消息使用方的客户端API将消息从连接传送到消息使用方。
8.消息使用方的客户端API向代理确认消息已使用。
消息生命周期结束
9.代理处理客户端确认,并在收到所有确认后删除(持久性)消息。
3.3消息中间件软件组成
消息中间件MacamMOM分为两部分程序,一个是代理服务器程序MacamMOM.exe,一个是客户端API动态库MOMClient.dll。
代理服务器程序运行于服务器机子上,提供消息的中转和安全存储。
客户端API以动态库的形式存在,可以提供给所有支持API调用的开发语言使用,它主要提供了发送/接收消息的功能。
3.4代理服务器程序
下面是代理服务器程序的主界面图:
代理服务器程序提供以下功能:
●系统属性设置
●维护与客户端的连接
●管理目标
●管理目标的用户
●管理消息
●管理身份验证
代理服务器程序最小化后会被缩放成一个小图标放入Windows右下角的托盘区,双击小图标即可恢复显示。
3.4.1系统属性
通过代理服务器程序,你可以对消息中间件的系统参数进行设置。
下面说明各个属性的设置。
●端口
此处可设置消息中间件的TCP/IP的服务端口号,客户端创建连接时,会首先连接到该端口,通过身份验证后,代理会分配一个新的服务端口给客户端使用。
如果在“每个客户连接使用独立的消息服务端口”复选框上打勾,那么代理会给每个客户端分配一个新的相互独立的服务端口,即每个客户端的服务端口各不相同,这样做的好处是每个客户端会得到独立的消息服务,避免可能的相互影响,坏处是增加了系统开销,如占用更多的内存和CPU时间,当有大量的客户端连接时,会使整个系统的性能下降。
●过期时间
为了保证系统的效率,我们必须指定每条消息在代理中可存在的最长时间,凡是超过此时间的消息,都会被视为无效而被删除。
●消息限制
设置消息限制可有效防止系统崩溃,我们可以限制消息的最大数量以及最大大小,超出限制时,新到的消息将会被拒绝。
如果不做限制,可设置为0。
●服务限制
服务限制针对的是客户端,它可以限制客户端的功能,只提供必要的服务。
比如可以限制客户端创建目标和删除目标,以防止客户端随意创建或者删除目标。
设置限制后,我们只能在代理服务器中进行目标的创建和删除,进行集中管理,增加了安全性。
3.4.2维护与客户端的连接
我们可以在代理服务器程序中查看和管理当前所有的客户端连接,如下图:
连接的信息包括连接的端口,客户端IP地址和机器名,连接时间。
我们可以选择一个或多个连接,可以断开选择的连接。
3.4.3管理目标
消息的发送和接收跟目标息息相关,消息是按目标进行管理的,它首先被发送到某个具体目标里,然后代理再转发给该目标中的其它用户使用(如果目标的类型是队列,则只有一个用户可以接收使用该消息)。
我们可以增加、编辑、删除目标,如下图显示了一个增加新目标的画面。
目标有两种类型:
队列和主题。
如果一条消息发送到类型是队列的目标里,那么该目标中只有一个用户会接收到该消息,即一对一发送。
如果目标是主题类型的,那么目标中的所有用户都会接收到该消息,即一对多,也就是可以实现广播功能。
我们还可以对每个目标设置它的用户上限,消息数量限制等,以及到达这些限制时所要做的动作。
当然,这些功能也可以由客户端来实现,即客户端根据自己的需要来创建和删除目标,前提是不能在前面的系统属性的“服务限制”中禁止这些功能。
但统一在代理服务器中来管理目标的好处是便于集中控制,防止XX的客户端随意乱建或者删除目标,增加系统的安全性。
3.4.4管理目标的用户
只有目标中的用户才可以发送和接收消息,因此,发送和接收消息之前,必须建立好目标和它的用户。
每个用户以ClientID和ClientName来标示,这两个的组合必须是唯一性的,如果建立的用户所在的目标是主题类型的,那么还要指定该用户是否是长期订户,长期订户意味着如果该用户不在线,代理将为它保留指定为持久性的消息,直到该用户上线或者消息过期。
当用户在线时,我们还可以看到该用户所在的主机名和IP地址,以及位于哪个可执行程序中。
同样的,我们可以创建、编辑、删除用户。
创建用户时,需要先选择左边的具体目标,创建后用户所在的目标就是刚才选择的目标。
如下图。
3.4.5管理消息
消息的管理在一个独立的窗口里进行,点击“消息”菜单里的“查看消息”子菜单即可进入该窗口。
之所以要在独立的窗口里来管理消息,是因为消息的发送和接收非常频繁,如果打开了该窗口,将会影响系统的效率,因此,建议平时不要打开这个窗口,该窗口最好在需要时才去打开它。
我们可以在该窗口中查看、删除某个目标,或者整个系统的消息,也可以删除过期消息。
选中某条消息后,消息的基本信息将被显示在右上边窗口里,消息的详细内容会被显示在右下窗口里,我们可以按十六进制或者ASCII码形式来查看消息的详细内容。
我们还可以看到该消息目前已经被哪些用户接收,或者哪些用户还未接收,按F5或者点击“详细信息”菜单里的“刷新”子菜单,就可以刷新这些信息。
在右上边窗口里,我们可以查看消息状态,如果该条消息还没有被代理转发,则显示“等待发送”;如果持久性消息发出后未收到回复,则显示“等待回复”;如果消息已经被所有需要使用它的用户处理,则显示“已处理”;如果消息被强制删除,则显示“已删除”。
需要注意的是,代理不保存“已处理”或者“已删除”的消息,因此,下次再进入该窗口时,这些消息将不会再出现。
3.4.6身份验证管理
为了增加系统的安全和稳定,在客户端连接到代理时,都需要经过身份验证,只有通过验证的客户端才能得到代理提供的消息服务。
为了达到这个目的,必须在代理中创建用于身份验证目的的用户,这样,客户端就可以使用这里创建的用户来创建连接了。
我们从“文件”菜单的“身份验证用户管理”就可以进行验证用户管理,如下图。
一、客户端API
客户端API以动态库(MOMClient.dll)的形式提供给客户端开发工具使用,主要功能包括发送,接收消息,创建目标和目标的用户等。
它们每个函数的格式和说明位于下列声明文件中。
C语言:
MOMClient.h(头文件)
MOMClient.lib(库文件)
Delphi:
MOMClient.pas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MacamV3 软件 说明书 03 消息 中间件