第 34 章 调优 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模式在单个事务中发送和接收消息。通过在单个交易中批处理消息,JBoss EAP 中集成的 ActiveMQ Artemis 服务器仅要求提交一次网络往返,而不是每次发送或接收。