2.7 四种标准MEP
值得注意的是NMR提供了一个可扩展的消息交流模型。JBI供应商可以自由地扩展四种MEP的标准目录。
每种模式以一个状态交换结束,用于确定交换已经结束。这种方式对于可选消息(或默认)作为消息交换模式的一部分来说尤其有用,在所有的MEP中支持可靠消息交换。
在标准JBI模式中,以起始组件开始的交换模式一般是服务的消费者,它创建并初始化一个新的交换实例。服务消费者 “拥有”这个消息交换实例直到把它发送出去(使用DeliveryChannel.send())。随后这些参与者交替接收和发送消息交换实例,直到某个参与者把消息交换状态设置为终结状态并把它发送给另一个参与者。当一个组件接收一个消息交换实例(使用DeliveryChannel.accept())时,就说它“拥有”一个消息交换。
下图显示了对于每种标准JBI消息交换模式,服务消费者和提供者之间可能的交互。每种模式都是两个参与者(无论它们的角色是服务提供者还是消费者)之间的契约。注意,当接收一个消息交换实例时,一个参与者可以通过使用MessageExchange.getRole()很容易地决定它的角色是服务提供者或是消费者。这有助于参与者在参与较复杂的模式时与参与较简单模式时一样方便。 图例(Diagram Key)
此处的MEP图展示了接下来的图例要使用到的符号。这些图代表了消息交换的时间顺序,时间在图中显示为从上到下。交替过程(故障或正常回复)使用选择符号表示。
图11 MEP图例
Page 21 of 67
2.7.1 In-Only消息交换模式(In-Only Message Exchange)
这种模式被用作单向消息交换。
图12 In-Only MEP
注意:
· 服务消费者使用消息发起请求。 · 服务提供者回复状态以完成交换。
2.7.2 健壮的In-Only消息交换模式(Robust In-Only Message Exchange)这种模式被用作可靠的单向消息交换。
图13 Robust In-Only MEP
注意:
· 服务消费者使用消息发起请求。 · 服务提供者可能回复状态或故障。
· 如果服务提供者回复状态,那么交换完成。
· 如果服务提供者回复故障,消费者回复状态以完成交换。
2.7.3 In-Out消息交换模式(In-Out Message Exchange)
这种模式被用作双向消息交换。
Page 22 of 67
图14 In-Out MEP
注意:
· 服务消费者使用消息发起请求。 · 服务提供者回复消息或故障。 · 消费者回复状态。
2.7.4 In Optional-Out消息交换模式(In Optional-Out Message Exchange)这种模式被用作服务提供者的回复可选的双向消息交换。
图15 In Optional-Out MEP
注意:
· 服务消费者使用消息发起一个请求。 · 服务提供者可能回复消息、故障或状态。 · 如果服务提供者回复状态,那么交换完成。
Page 23 of 67
· 如果服务提供者回复故障,消费者必须回复状态。 · 如果服务提供者回复消息,消费者可能回复故障或状态。 · 如果服务消费者恢复故障,提供者必须恢复状态以完成交换。
2.8 传输通道
JBI传输通道是双向的通信管道,通过NMR传输消息以连接绑定组件和服务引擎。接口javax.jbi.messaging.DeliveryChannel确定服务消费者、服务提供者和NMR三者之间的接口合约关系。
服务使用者通过其传输通道初始化服务调用请求;服务提供者通过其传输通道接受消费者的调用请求。既是使用者又是提供者的组件使用相同的一条传输通道。因此,接口DeliveryChannel的实现必须支持通道实例在多线程下的并发使用。
2.9 服务API(Service API)
此API允许JBI组件与NMR交互。
Page 24 of 67
图16 NMR API类图
Page 25 of 67