我有几个应用程序需要使用 JMS 相互通信。我将它们描述为服务器和客户端。执行以下步骤:
- 客户端向服务器发送一个请求,记住消息 ID。
- 服务器向给定的回复地址发送回复(并且还根据请求的消息 ID 设置相关 ID)。
- 客户端使用相关 ID 匹配对请求的回复。
如果只有这两个,这很好用。
当我们引入(基于内容的)路由器时,会执行以下步骤:
- 客户端向路由器发送一个请求,记住消息 ID。
- Router检查消息的内容并将消息转发给Server。(转发消息 ID 更改时。)
- 服务器向给定的回复地址发送回复(并且还根据请求的消息 ID 设置相关 ID)。
- 客户端与请求的回复不匹配,因为路由器更改了消息 ID。
我终其一生都无法弄清楚如何在符合 JMS 规范的同时正确实现路由器。
我想出了以下内容,但不知道这是否是最佳做法:
- 客户端向路由器发送一个请求,记住消息 ID。
- 路由器检查消息的内容。
- 路由器记住原始消息并向服务器发送新消息(将回复地址设置为路由器的回复通道)。
- 服务器向给定的回复地址发送回复(并且还根据新请求的消息 ID 设置相关 ID)。
- 路由器将回复与路由器发出的请求相匹配。
- Router根据Server的回复创建回复,将关联ID设置为原始消息的消息ID。
- 客户端匹配路由器对原始请求的回复。
JMS 路由器应该如何工作/我的设计是否正确?