重用 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 的垃圾收集器将不得不做更少的工作,但这实际上可能不是您的应用程序的瓶颈,因此它可能没有真正的区别最终。最重要的是,您只需要对其进行测试,看看它有什么不同(如果有的话)。
我正在研究发送 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 的垃圾收集器将不得不做更少的工作,但这实际上可能不是您的应用程序的瓶颈,因此它可能没有真正的区别最终。最重要的是,您只需要对其进行测试,看看它有什么不同(如果有的话)。