我正在开发一个通过 TIBCO EMS 提供请求/响应服务的服务器端项目,并且正在寻找有关存档可扩展性以及此服务的低延迟的最佳实践的建议。我在 .NET 上执行此操作,但由于 TIBCO EMS 据称正在实现 JMS 规范,因此我认为其他 JMS 实现以及平台 (Java) 的建议是相关的。
目前,我们正在使用一个 Connection、一个 Session、一个 Consumer,并使用该单个 Consumer 上的回调来监听消息。每个请求都在回调线程上处理,同步回复不同的队列(但相同的会话)。这可行,但似乎无法扩展 - 即使在高事务率下,CPU 负载也可以忽略不计,但请求的延迟不断增长。
我假设正在发生的事情是 EMS 使用单个线程进行回调,因此处理时间以及发送回复所需的时间会阻止其他请求被处理,但是 - 什么是让它扩展的最佳方法?
一种方法是在收到后立即安排线程池上传入请求的实际处理。这是一个快速修复并且可以扩展,但是会引入额外的延迟并且会引入围绕会话使用的线程问题。另一种是拥有多个 Session 对象,甚至是 Connection 对象?任何人都可以就这样做的最佳实践提出建议,我想它一定是那里更常见的使用模式之一......