将应答消息的范围限制为请求应用程序本地的队列点
当 JMS 队列将服务集成总线队列标识为应答队列,并且该服务集成总线队列具有多个队列点时,您可以配置 JMS 队列以将消息范围限制为引用该 JMS 队列的应用程序本地的队列点。执行此操作以确保将应答消息发送至集群总线成员的相应队列点。
如果服务集成总线队列归具有多个消息传递引擎(通常是为了提供工作负载分担或者可伸缩性)的集群总线成员所有,那么该队列具有多个队列点。本地队列点是应用程序连接至的消息传递引擎上的队列点。
示例:配置称为“应答”的 JMS 队列以标识要用作应答队列的服务集成总线队列。JMS 队列配置为将消息范围限制为本地队列点(请参阅“相关任务”以了解更多详细信息)。

总线成员还拥有用作应答队列的服务集成总线队列,这样就对每个消息传递引擎配置了应答队列的队列点。
请求应用程序将创建 JMS 消息,并将 JMSReplyTo 目标设置为 JMS 队列“应答”。请求应用程序将请求消息发送至使用另一 JMS 队列的服务队列(称为“服务”)。(“服务”不需要特殊配置。)缺省情况下,此消息可能会传送至属于“服务”的任一队列点,尽管它通常会到达本地队列点。但是,为全面演示此示例,系统将该消息发送至另一队列点。
当发送请求消息的应用程序连接至消息传递引擎(已同时对该引擎配置了底层服务集成总线应答队列的队列点)并且已启用选项时,应答队列的该单个队列点的标识将添加至消息的 JMSReplyTo 队列的信息中。

请求消息将传送至名为“服务”的服务队列并由该服务处理。完成时,该服务会将 JMS 消息传送至请求消息中标识的应答队列(通过使用 JMS Message.getJMSReplyTo 方法获取)。此时,缺省情况下消息传递系统会将应答消息发送至 应答”的任一队列点,但因为请求方将应答队列的范围限定为其本地队列点,所以应答消息将发送至该请求方连接至的消息传递引擎上的单个队列点。

系统按服务集成总线队列只有一个队列点的情况进行处理。如果被限定为应答范围的队列点不可用,那么该消息不会发送至任何其他队列点。
- 应答消息总是被发送回请求应用程序本地的队列点。这会减少消息路由。
- 连接至总线成员中的不同消息传递引擎的请求应用程序可使用同一 JMS 队列定义。这允许在集群中以动态方式均衡工作负载。
- 如果请求应用程序计划在接收应答消息之前断开连接然后再重新连接,那么该应用程序必须知道它连接至哪个消息传递引擎并且在重新连接时必须连接至同一消息传递引擎。这是在 JMS 连接工厂中通过将某个消息传递引擎作为目标并使用 JMS 连接工厂重新连接实现的。此配置排除了工作负载均衡。
- 请求应用程序必须连接至拥有服务集成总线应答队列的总线成员中的消息传递引擎。否则,将没有本地队列点可作为应答消息范围,并且系统将遵循缺省消息路由行为。
改进
- 多个连接工厂,每个连接工厂将不同消息传递引擎作为目标。
- 要在连接工厂之间展开的请求应用程序。