【问题标题】:Tibco EMS Queue needs to be Purged when Bridged桥接时需要清除 Tibco EMS 队列
【发布时间】:2017-02-05 06:15:26
【问题描述】:

我在生产系统上有一个 Tibco EMS 消息队列,它将消息从单个生产者路由到单个消费者应用程序。

我们正在垂直扩展应用程序,但由于资金限制,我们无法成对扩展这两个应用程序。

单个生产者将消息路由到消息代理,消息代理需要根据消息选择器将消息桥接到 3 个消费者中的 1 个。

我已经设置了一个队列桥和选择器来将生产者队列上的消息路由到消费者队列。这是一个一对多队列桥。

我注意到桥接的消费者队列附加了消费者,并且他们根据选择器正确接收消息,但是生产者队列保留了必须在一天结束时手动清除的消息副本。

使用桥接器和选择器处理这种情况的最佳方法是什么,以便消息保留在代理上,直到它被消费(持久),但是一旦消息被消费者队列消费,消息就会被代理删除.

【问题讨论】:

    标签: jms tibco-ems


    【解决方案1】:

    处理原始队列的这些消息最简单的方法是在队列中引入 MaxMsgs 和 MaxBytes。

    至于您要求原始队列上的消息只有在其中一个桥接队列上被消费时才能被释放,这是不可能的。

    也就是说,它也不需要,因为桥接队列保留自己的消息副本,无论源队列中的消息发生什么。所以原始队列中的过期消息对已经桥接的消息没有影响

    【讨论】:

    • 谢谢,但是您如何得出 MaxMsgs 和 MaxBytes 的数字?收到的消息数量是不确定的。它可能是每天 1 次或每分钟数千次。
    • 如果您不需要源队列中的消息用于任何其他目的,您可以将 MaxMsgs 设置为 1。因此队列只存储最后一条消息。
    • 啊。我会试一试的。
    • 这似乎没有按预期工作。写入父队列的生产者应用程序抛出 javax.jms.ResourceAllocationException:超出队列限制。当我将 Max Messages 设置为 0 时,消息会在重试时再次流过。
    • 这是由 OverflowPolicy 引起的行为。要丢弃旧消息,只需将值更改为“discardOld”(或数字“1”)。默认值为“0”,这意味着一旦队列已满,它将拒绝进一步的消息。
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 2013-09-28
    • 2018-12-08
    • 2013-04-26
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多