企业集成模式-第十章

十、消息传递端点

10.1 引言

1)发送和接收模式

某些端点模式即适用于发送者,也适用于接收者。它们通常涉及如何把应用与消息传递系统联系起来。

封装消息传递代码:大多数应用的代码在编写时没有考虑消息传递问题。当应用需要与其他程序集成时,应该由一个很瘦的代码层实现应用的集成功能。当采用消息传送实现集成时,该代码瘦层就是消息传递网关,它把应用与消息传递系统连接起来。

数据转换

外部控制的事务

2)消息消费者模式

同步或异步的消费者:开发人员可选择使用轮询消费者或事件驱动的消费者

消息分配与消息抓取

接受所有的消息或过滤消息

断开连接时仍能订购

幂等性

3)消息端点主题(略)

10.2 消息传递网关

如何把对消息传递系统的访问封装起来,使之独立于应用的其他部分?

大多数定制应用都通过开发商提供的 API来访问消息传递基础设施。尽管不同开发商提供的 API风格不同,但是这些库有类似的功能,如“打开通道”、“创建消息”和“发送消息”。
image
使用消息传递网关类把特定于消息传递的方法调用包装起来,向应用提供领域相关的方法。

1)链接网关

创建多层消息传递网关很有好处。“较低层次”的消息传递网关只能抽出消息传递系统的语法,而保持一般的消息传递语义不变,如 SendMessage。
image

2)处理消息传递异常

3)生成网关

在很多情况下,可以根据外部资源提供的元数据生成消息传递网关代码。Web 服务就经常使用这种方法。几乎每个开发商或开放源代码的平台都提供了类似 wsdi2java 的工具,它能连接由外部 Web 服务提供的 Web 服务描述语言 (Web Service Description Language,WSDL)。这个工具会生成 Java(或 C#,或你需要的某种语言)类,把所有与 SOAP 相关的处理封装起来,提供一个简单的函数调用接口。

4)使用网关用于测试

stub 桩

10.3 消息传递映射器

如何实现领域对象与消息传递基础设施之间的数据传递,同时保持它们之间的相互独立?
image
创建一个单独的消息传递映射器,其中包含消息传递基础设施与领域对象之间的映射逻辑。对象和基础设施都不需要知道消息传递映射器的存在。

消息传递映射器能访问一个或多个领域对象,并把它们转换为消息通道所要求的消息。它还实现了相反的功能,能根据到来的消息创建或更新领域对象。由于消息传递映射器实现为一个单独的类,这个类同时引用了领域对象和消息传递层,因此领域对象与消息传递层都不了解对方,甚至不知道消息传递映射器的存在。

10.4 事务性客户端

ACID

10.5 轮询消费者

image

10.6 事件驱动的消费者

轮询消费者的缺点是:通道为空时,消费者将阻塞线程,而且/或者当消费者轮询尚未到达的消息时,将消耗处理时间。基于轮询,客户端能控制消费的速度,但是没有可消费的消息时,就会造成资源的浪费。

应用应当使用事件驱动的消费者,当消息传输到通道中时,事件驱动消费者能自动处理消息。

10.7 竞争消费者

10.8 消息分派器

10.9 选择性消费者

10.10 持久订购者

10.11 幂等接收者

10.12 服务激励器

应用应该如何设计这个服务,从而既能通过各种消息传递技术调用,也能通过非消息传递技术调用?

服务激励器既可以是单向的(只有请求),也可以是双向的(请求/应答)。服务可能非常简单,只是一个方法调用(同步而且非远程),可能是服务层的一部分[EAA]。激励器既可以硬编码,从而始终调用同一个服务,也可以使用反射调用由消息指定的服务。激励器处理所有的消息传递细节,并像其他客户端一样调用服务,因此服务甚至不知道对它的调用是通过消息传递进行的。

posted @ 2023-11-26 19:39  LHX2018  阅读(8)  评论(0编辑  收藏  举报