可以采取哪些步骤来优化tibco JMS以提高性能?

时间:2011-02-15 17:05:46

标签: java performance jms tibco tibco-ems

我们正在运行一个高吞吐量系统,该系统利用tibco-ems JMS将大量消息传递到主服务器或从我们的主服务器传递到客户端连接。我们已经做了一些统计,并确定JMS导致了很多延迟。我们怎样才能让tibco JMS更高效?是否有任何资源可以就此主题进行讨论。

2 个答案:

答案 0 :(得分:3)

如果您不需要持久性,则使用非持久性消息是一种选择。 请注意,即使您确实需要持久性,有时最好使用非持久性消息,并且在崩溃的情况下执行不同的恢复操作(如重新发送所有消息)

如果符合以下条件,则相关:

  • 崩溃很罕见(因为恢复需要时间)
  • 您可以轻松检测到崩溃
  • 您可以处理重复的消息(您可能无法确切地知道在崩溃之前传递了哪些消息

EMS还提供了一些持久性的机制,但是经典保证交付的防弹性较低 这些包括:

  • 而不是“完全一次”消息传递,您可以使用“至少一次”或“最多一次”传递。
  • 您可以使用预取机制,使客户端在您的应用程序请求之前将消息提取到内存。

答案 1 :(得分:0)

EMS不应该是瓶颈。我已经完成了测试,我们在服务器上获得了大量的吞吐量。

您需要尝试确定瓶颈的位置。是消息的生产者还是消费者的问题。邮件是否堆积在队列中。

你在做什么类型的场景。

Pub / sup或请求回复?         你有临时队列堆积。临时队列太多可能会导致性能问题。 (大多数情况下,当他们因为你没有正确关闭某些东西而逗留时)

您是否正在发布具有持久订阅者的主题(如果是这样)。尝试将主题桥接到队列并从中读取。持久的订阅者也可能会对性能造成一些打击,因为它需要跟踪谁拥有所有消息的副本。

确保您的发送过程在该会话中有一个会话和多个呼叫。不要为每个操作打开一个完整的会话。尽可能重复使用。为消费者做同样的事。

确保在完成后关闭。 EMS不会清理事情。因此,如果您建立连接并关闭应用程序,那么连接仍然存在,并且会占用资源。

即使发生崩溃,也要检查您对丢失邮件的容忍度。如果你正在使用Client ack,如果你崩溃处理消息并不重要,那么切换到auto。另外我相信如果您正在使用(TEMS - Tibco EMS for WCF)会话确认有问题。因此,只有当消息在整个消息上处理时,我们才会从客户端ACK切换到具有Dups的那个消息,并且效果更好。