第 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 服务器仅要求提交一次网络往返,而不是每次发送或接收。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat