19.2. 调优 Java 消息服务(JMS)
如果使用 JMS API,请查看以下信息以获取有关如何提高性能的提示。
禁用消息 ID。
如果您不需要消息 ID,请在
MessageProducer类中使用setDisableMessageID ()方法来禁用它们。将值设为true可消除创建唯一 ID 并缩小消息大小的需求。禁用消息时间戳。
如果您不需要消息时间戳,请在
MessageProducer类中使用setDisableMessageTimeStamp ()方法来禁用它们。将值设为true可消除创建时间戳的开销,并减少消息的大小。避免使用
ObjectMessage。ObjectMessage用于发送具有序列化对象的消息,即消息或有效负载的正文作为字节数发送。Java 序列化形式甚至小对象非常大,并在有线上占用大量空间。与自定义捆绑技术相比,它也很慢。只有在无法使用其它消息类型时才使用ObjectMessage,例如,如果您不知道有效负载的类型,直到运行时为止。避免
AUTO_ACKNOWLEDGE.选择消费者的确认模式会影响性能,因为通过网络发送确认消息导致了额外的开销和流量。
AUTO_ACKNOWLEDGE会导致这个开销,因为它需要为客户端收到的每个消息从服务器发送确认。如果可能,请使用DUPS_OK_ACKNOWLEDGE,它以 lazy 方法或CLIENT_ACKNOWLEDGE确认消息,这意味着客户端代码将调用一个方法来确认消息。或者,通过转换的会话中确认或提交许多确认。避免持久消息。
默认情况下,JMS 消息是持久的。如果不需要持久消息,请将其设置为非持久。持久化消息会产生额外的开销,因为它们被保留到存储中。
使用
TRANSACTED_SESSION模式在单个事务中发送和接收消息。通过在单个事务中批处理消息,AMQ Broker 只需要提交中的一个网络往返,而不是每次发送或接收。