我们正在运行一个高吞吐量系统,该系统利用tibco-ems JMS将大量消息传递到主服务器或从我们的主服务器传递到客户端连接。我们已经做了一些统计,并确定JMS导致了很多延迟。我们怎样才能让tibco JMS更高效?是否有任何资源可以就此主题进行讨论。
答案 0 :(得分:3)
如果您不需要持久性,则使用非持久性消息是一种选择。 请注意,即使您确实需要持久性,有时最好使用非持久性消息,并且在崩溃的情况下执行不同的恢复操作(如重新发送所有消息)
如果符合以下条件,则相关:
EMS还提供了一些持久性的机制,但是经典保证交付的防弹性较低 这些包括:
答案 1 :(得分:0)
您需要尝试确定瓶颈的位置。是消息的生产者还是消费者的问题。邮件是否堆积在队列中。
你在做什么类型的场景。
Pub / sup或请求回复? 你有临时队列堆积。临时队列太多可能会导致性能问题。 (大多数情况下,当他们因为你没有正确关闭某些东西而逗留时)
您是否正在发布具有持久订阅者的主题(如果是这样)。尝试将主题桥接到队列并从中读取。持久的订阅者也可能会对性能造成一些打击,因为它需要跟踪谁拥有所有消息的副本。
确保您的发送过程在该会话中有一个会话和多个呼叫。不要为每个操作打开一个完整的会话。尽可能重复使用。为消费者做同样的事。
确保在完成后关闭。 EMS不会清理事情。因此,如果您建立连接并关闭应用程序,那么连接仍然存在,并且会占用资源。
即使发生崩溃,也要检查您对丢失邮件的容忍度。如果你正在使用Client ack,如果你崩溃处理消息并不重要,那么切换到auto。另外我相信如果您正在使用(TEMS - Tibco EMS for WCF)会话确认有问题。因此,只有当消息在整个消息上处理时,我们才会从客户端ACK切换到具有Dups的那个消息,并且效果更好。