【问题标题】:TIBCO EMS: Set Priority In Case Of Multiple Receiver For QueueTIBCO EMS:在队列有多个接收方的情况下设置优先级
【发布时间】:2017-02-03 13:04:52
【问题描述】:

我们在两台不同的机器(N1 和 S1)上托管了相同的 BW 应用程序。这些应用程序将消息发送到队列。现在这个队列的接收者是 BE 服务,它托管在两台不同的机器(N2 和 S2)上。

我们有一个要求,当 N2 和 S2 都处于活动状态时,来自 N1 的消息应该由 N2 选择,并且只有在 N2 关闭时才应该由 S2 选择。当 N2 和 S2 都处于活动状态时,来自 S1 的消息应由 S2 选择,并且仅在 S2 关闭时才应由 N2 选择。

有人可以告诉我如何实现这一目标吗?

【问题讨论】:

    标签: jms tibco ems


    【解决方案1】:

    在来自 N1 和 S1 上的 BW 应用程序的消息中设置自定义 JMS 标头,说明消息来自哪个 BW 应用程序。

    现在在 BE 服务中,您可以阅读此标头消息并检查集群中是否正在运行其他 BE 服务(我假设它们是集群的)。

    例如在 N2 BE 服务中 伪代码:

    if (custom_jms_header_value = "N1") {
    // process
    }
    else if (custom_jms_header_value = "S1" and cluster_check_S2) {
    // S2 is down so process the message
    }
    

    并在 S2 BE 服务中反向

    if (custom_jms_header_value = "S1") {
    // process
    }
    else if (custom_jms_header_value = "N1" and cluster_check_N2) {
    // N2 is down so process the message
    }
    

    【讨论】:

    • 你能详细说明一下实现吗?我在哪里编写此代码,因为无法在消息选择器中给出条件。另外,当我的消息被 N2 BE 选中并且两个条件都为 false 时,消息将如何发送到 S2 BE?
    • 不,我不是说使用 JMS 消息选择器。我的意思是设置一个自定义 JMS 标头并在 BE 代码中读取该 JMS 标头以了解它来自哪个 BW 引擎(N1 或 S1)并决定是否在 N2 或 S2 BE 代码中进行处理。这段代码我希望用 BE 代码编写,可能在预处理器中。如果 N2 BE 接收到消息,它会读取 JMS 标头值,如果该值显示为 N1,它将处理,如果显示为 S1,它将检查集群以查看 S2 BE 引擎是否处于活动状态。如果 S2 BE 引擎处于活动状态,则不会对其进行处理,但如果 S2 BE 引擎处于活动状态,它将对其进行处理。
    • 假设 N2 和 S2 都处于活动状态,并且来自 S1 的消息被 N2 拾取。现在在这种情况下,我的 N2 将不会处理该消息,因为它打算由 S2 选择。但是由于消息已经被 N2 消费了(即使没有处理),那么消息将如何被 S2 使用?
    • 好的,好问题。为此,我建议您使用主题并将 S2 BE 和 N2 BE 都设置为订阅者。当一条消息从 N1 或 S1 BW 发送到该主题时,N2 和 S2 BE 都会收到该消息并进行检查。在 N2 BE 上,如果消息来自 N1 BW,它将处理它,如果消息来自 S1 BW,它将检查 S2 BE 是否处于活动状态,并且仅当 S2 BE 关闭时才处理它。在 S2 BE 上,如果消息来自 S1 BW,它将处理它,如果消息来自 N1 BW,它将检查 N2 BE 是否处于活动状态,并且仅当 N2 BE 关闭时才处理它。这应该满足您的所有要求。
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2014-04-09
    相关资源
    最近更新 更多