我正在编写一个服务于无状态传入请求的服务。这些请求都是数学计算,执行时间不会很长(最多 2 毫秒)。
我使用 Tibco EMS 在客户端/服务器之间进行通信。提供了一个客户端库,它封装了客户端逻辑(例如将数据转换为 EMS 消息等)并将请求发送到请求队列。服务器端处理请求并将响应发送到单独的队列中。这工作正常。
服务器端是多线程的。当接收到新的传入请求时,将创建一个新线程。因此请求是同时处理的。
服务器端使用单个 EMS 连接到 EMS 服务器。但是,因为 EMS Session 不是线程安全的,如果我希望能够在每个线程中写入对 EMS 队列的响应,我必须使用 connectionFactory 为每个线程创建一个会话。这降低了性能。
在流量上花费的时间大约是 3-4ms,即从发送请求到收到响应之间的时间大约是 5-6ms。(3-4ms 用于传输,marshal/unmarshal,2ms 用于计算)。
是否有任何解决方案允许我在不创建两个 JMS 对象的情况下同时发送到 EMS 队列?
我是否需要遵循其他重要规则来进一步优化服务?已经遵循了一些基本的优化指南:
- 使用 CachedConnectionPool
- 以 NON_PERSISTANT 形式发送 JMS 消息
- 对所有请求使用一个 EMS 连接。
非常感谢。