2011-02-15 85 views
1

我们正在运行一个高吞吐量系统,该系统利用tibco-ems JMS将大量消息传入我们的主服务器并传递给我们的客户端连接。我们已经做了一些统计并确定JMS会导致很多延迟。我们如何才能使tibco JMS更高效?有没有任何资源可以对这个主题进行很好的讨论。可以采取哪些步骤优化tibco JMS以提高性能?

+1

你有没有试过问过Tibco?它仍然是一个商业产品不是吗?最好的信息可能来自他们。你能发布你所看到的延迟和你正在做什么测试吗?例如你是否启用了持久性?我希望他们在1毫秒左右的时间内收到一条短信。 – 2011-02-15 17:42:24

+0

我们确实启用了持久性。这可能是我们将要采取的第一步,以减少延迟。另一个是减少日志记录级别。询问Tibco是个好建议。谢谢 – richs 2011-02-16 14:35:49

回答

2

如果您不需要持久性,则使用非持久消息是一种选择。 请注意,即使你需要坚持,有时它更好地使用非持久性消息,并在发生碰撞的情况下执行不同的恢复操作(如重新发送的所有邮件)

这是相关的,如果:

  • 崩溃是罕见的(为恢复需要时间)
  • 你可以很容易地检测到崩溃
  • 您可以处理重复消息(您可能不知道到底哪些消息崩溃
前交付

EMS还提供了一些机制,是持久的,但防弹小于经典保证交付 其中包括:

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

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

您需要尝试确定瓶颈在哪里。消息生产者或消费者是否存在问题?消息堆积在队列中。

你在做什么类型的场景。

Pub/sup or request reply? 你是否有临时队列堆积。太多的临时队列可能会导致性能问题。 (主要是当他们逗留,因为你没有妥善关闭某些东西)

如果是的话,你是否正在发布一个拥有持久订阅者的主题。尝试桥接主题排队和阅读。由于需要跟踪谁拥有所有消息的副本,耐用用户可能会导致性能出现一些小问题。

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

确保您完成后关闭。 EMS没有把事情搞清楚。因此,如果您建立连接并关闭应用程序,则连接仍然存在,并吸取资源。

在发生碰撞事故时检查您对丢失信息的容忍度。如果您正在进行客户端确认,并且无论您是否处理该消息时崩溃,都切换到自动。另外我相信,如果您使用(TEMS - Tibco EMS for WCF),会话确认会出现问题。所以一条消息只有当它在整个消息上处理时,我们从客户端ACK切换到具有Dups ok并且它工作得更好的那个)

相关问题