7.7. 调整 Jakarta 消息传递
如果使用 Jakarta Messaging API,请查看以下信息,以了解有关如何提高性能的提示。
禁用消息 ID。
如果您不需要消息 ID,请在
MessageProducer
类上使用setDisableMessageID ()
方法禁用它们。将值设为 true 可消除创建唯一 ID 的开销,并减少消息的大小。禁用消息时间戳。
如果您不需要消息时间戳,请在
MessageProducer
类上使用setDisableMessageTimeStamp ()
方法禁用它们。将值设为 true 可消除创建时间戳的开销,并减少消息的大小。避免使用
ObjectMessage
。ObjectMessage
用于发送包含序列化对象(即消息的正文或有效负载)的消息,作为字节数流通过线发送。Java 序列化形式甚至小对象非常大,并占用线上大量空间。与自定义划分技术相比,它也会较慢。只有在您无法使用其他消息类型之一时,才使用ObjectMessage
,例如,如果您不知道有效负载的类型,直到运行时为止。避免
AUTO_ACKNOWLEDGE
.选择使用消费者的确认模式会影响性能,因为通过发送通过网络发送的确认消息会增加开销和流量。
AUTO_ACKNOWLEDGE
会导致这个开销,因为它需要为客户端上收到的每个消息从服务器发送一个确认。如果您可以使用DUPS_OK_ACKNOWLEDGE
,它以延迟方式确认消息CLIENT_ACKNOWLEDGE
,这意味着客户端代码将调用一个方法来确认消息,或使用一个确认或提交的一个确认或提交。避免持久消息。
默认情况下,Jakarta Messaging 消息是 durable。如果您不需要持久消息,请将它们设置为
非持久消息
。持久化消息会导致大量开销,因为它们被保留到存储中。使用
TRANSACTED_SESSION
模式在单个事务中发送和接收消息。通过在单一事务中批处理消息,JBoss EAP 中集成的 ActiveMQ Artemis 服务器只需要一个网络往返提交,而不是在每次发送或接收时。