十、消息传递端点
10.1 引言
1)发送和接收模式
某些端点模式即适用于发送者,也适用于接收者。它们通常涉及如何把应用与消息传递系统联系起来。
封装消息传递代码:大多数应用的代码在编写时没有考虑消息传递问题。当应用需要与其他程序集成时,应该由一个很瘦的代码层实现应用的集成功能。当采用消息传送实现集成时,该代码瘦层就是消息传递网关,它把应用与消息传递系统连接起来。
数据转换
外部控制的事务
2)消息消费者模式
同步或异步的消费者:开发人员可选择使用轮询消费者或事件驱动的消费者
消息分配与消息抓取
接受所有的消息或过滤消息
断开连接时仍能订购
幂等性
3)消息端点主题(略)
10.2 消息传递网关
如何把对消息传递系统的访问封装起来,使之独立于应用的其他部分?
大多数定制应用都通过开发商提供的 API来访问消息传递基础设施。尽管不同开发商提供的 API风格不同,但是这些库有类似的功能,如“打开通道”、“创建消息”和“发送消息”。
使用消息传递网关类把特定于消息传递的方法调用包装起来,向应用提供领域相关的方法。
1)链接网关
创建多层消息传递网关很有好处。“较低层次”的消息传递网关只能抽出消息传递系统的语法,而保持一般的消息传递语义不变,如 SendMessage。
2)处理消息传递异常
3)生成网关
在很多情况下,可以根据外部资源提供的元数据生成消息传递网关代码。Web 服务就经常使用这种方法。几乎每个开发商或开放源代码的平台都提供了类似 wsdi2java 的工具,它能连接由外部 Web 服务提供的 Web 服务描述语言 (Web Service Description Language,WSDL)。这个工具会生成 Java(或 C#,或你需要的某种语言)类,把所有与 SOAP 相关的处理封装起来,提供一个简单的函数调用接口。
4)使用网关用于测试
stub 桩
10.3 消息传递映射器
如何实现领域对象与消息传递基础设施之间的数据传递,同时保持它们之间的相互独立?
创建一个单独的消息传递映射器,其中包含消息传递基础设施与领域对象之间的映射逻辑。对象和基础设施都不需要知道消息传递映射器的存在。
消息传递映射器能访问一个或多个领域对象,并把它们转换为消息通道所要求的消息。它还实现了相反的功能,能根据到来的消息创建或更新领域对象。由于消息传递映射器实现为一个单独的类,这个类同时引用了领域对象和消息传递层,因此领域对象与消息传递层都不了解对方,甚至不知道消息传递映射器的存在。
10.4 事务性客户端
ACID
10.5 轮询消费者
10.6 事件驱动的消费者
轮询消费者的缺点是:通道为空时,消费者将阻塞线程,而且/或者当消费者轮询尚未到达的消息时,将消耗处理时间。基于轮询,客户端能控制消费的速度,但是没有可消费的消息时,就会造成资源的浪费。
应用应当使用事件驱动的消费者,当消息传输到通道中时,事件驱动消费者能自动处理消息。
10.7 竞争消费者
10.8 消息分派器
10.9 选择性消费者
10.10 持久订购者
10.11 幂等接收者
10.12 服务激励器
应用应该如何设计这个服务,从而既能通过各种消息传递技术调用,也能通过非消息传递技术调用?
服务激励器既可以是单向的(只有请求),也可以是双向的(请求/应答)。服务可能非常简单,只是一个方法调用(同步而且非远程),可能是服务层的一部分[EAA]。激励器既可以硬编码,从而始终调用同一个服务,也可以使用反射调用由消息指定的服务。激励器处理所有的消息传递细节,并像其他客户端一样调用服务,因此服务甚至不知道对它的调用是通过消息传递进行的。
标签:集成,网关,调用,消费者,映射器,第十章,模式,消息,消息传递 From: https://www.cnblogs.com/lhxBlogs/p/17857778.html