WS-Reliable Messaging
消息流导入时没有启用 WS-Reliable Messaging。任何人都可以调用 Web Service 来使用消息,类似于 TCP/IP Monitor 使用 SOAP over HTTP。要启用 WS-Reliable Messaging,请参阅扩展“地址簿”样本 。
启用 WS-RM 是在 IBM Integration Bus 级别执行的管理任务。不能在开发消息流时配置 WS-RM;必须在代理中配置策略,并将其与代理归档 (BAR) 文件中的消息流关联。
为何使用 WS-Reliable Messaging
在“地址簿”扩展样本中,使用者和提供者具有相同的可靠消息传递需求:
确保在服务器意外重新启动时传递 SOAP 消息。
确保在客户机和服务器之间的连接由于超时等原因故障时传递 SOAP 消息。客户机应该能检测该情况并重试消息传输。
WS-RM 协议定义了如何重新发送被其确定为未成功传递的消息,并可防止将重复的消息传递到目标应用程序,从而满足了这些需求。
WS-Reliable Messaging 如何工作
WS-RM 的关键是序列的概念。WS-RM 中的序列是 Web Service 客户机和 Web Service 提供者之间的合同,它们借此同意在彼此之间可靠地传输消息。序列用于维护已发送和接收的消息的状态。序列本身是特定于提供者的端点的。当客户机初次向 Web Service 提供者的端点发送消息时,系统会针对该提供者的端点创建序列,所有从该客户机发送到该提供者的端点的后续消息都在该序列上传递。序列允许客户机端和提供者端 WS-RM 确定是否需要再次传递应用程序消息,并检测到达的消息是否重复,
为了定义序列和维护当前状态,客户机和提供者 WS-RM 都使用一个来回发送的定义协议消息集合。下图显示了使用 WS-RM 的请求/应答 Web Service 调用的典型消息流。
样本场景
下面是描述启用 WS-RM 时样本如何工作的步骤:
系统会确定协议前置条件。这包括策略交换、端点解析和建立信任。
使用者请求创建新序列。
提供者创建新序列并返回其唯一标识。
使用者开始在序列中从 MessageNumber 1 开始传输消息。SOAPRequest 节点发送的每个请求都将创建一个新序列,因此所有消息都有 MessageNumber 1。
使用者还加入一个 AckRequested 头以确保及时获取序列的 SequenceAcknowledgement。
提供者由于接收到使用者的 AckRequested 头,从而确认接收了第 1 号消息。如果双方之间的任何消息由于任何原因而丢失,那么使用者不会收到应答。
使用者用相同的 MessageNumber 重新传输未获应答的消息。
从底层传输的角度来看这是一个新消息,但它有相同的序列标识和 MessageNumber,因此如果提供者既接收到原始消息也收到了重新传输的消息,就可识别出它是先前消息的重复版本。
使用者在重新传输的消息中加入 AckRequested 头,以便提供者加速应答。
提供者接收第二次传输的有 MessageNumber 1 的消息,并确认接收第 1 号消息.
使用者接收此应答并向提供者发送 TerminateSequence 消息,表明序列已完成。
TerminateSequence 消息表明第 1 号消息是序列中的最后一个消息。
提供者接收 TerminateSequence 消息,该消息表明使用者不会再发送任何消息。提供者向使用者发送 TerminateSequenceResponse 消息,收回与序列关联的所有资源。
关于消息是否应该按顺序传递的详细信息包含在 WS-RM 策略集中。请使用上图进行参考。
返回到“扩展‘地址簿’样本”
返回到样本主页