重用 javax.jms.BytesMessage

Reusing javax.jms.BytesMessage

我正在研究发送 javax.jms.BytesMessage.

的重负载消息调度程序

单个线程正在从队列中获取特定于应用程序的对象,将它们序列化并作为 BytesMessage 发送出去(发布到特定主题)。

此线程只有一个 JMS 会话。

实际上是

// for every message
BytesMessage message = session.createBytesMessage();
message.setJMSType("MyType");
message.setStringProperty("MyProp", "val");
message.writeBytes(data);
publisher.send(message);

为每条要发送的消息完成。

只创建一个 BytesMessage 并重新使用它们怎么样 - 这是 possible/more 性能(内存,...)吗?

// only once
session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
message = session.createBytesMessage();
message.setJMSType("MyType");
message.setStringProperty("MyProp", "val");
// for every message
message.clearBody();
message.writeBytes(data);
publisher.send(message);

可以创建单个 BytesMessage,然后在每次发送前清除它并写入新数据。然而,这将如何从性能角度最终影响您的应用程序将归结为您正在使用的 JMS 客户端实现。

一般来说,您应该通过重用消息来节省一点垃圾,这意味着 JVM 的垃圾收集器将不得不做更少的工作,但这实际上可能不是您的应用程序的瓶颈,因此它可能没有真正的区别最终。最重要的是,您只需要对其进行测试,看看它有什么不同(如果有的话)。