gpt4 book ai didi

java - 从特定的持久 Tibco EMS 订阅中删除消息

转载 作者:行者123 更新时间:2023-11-29 08:49:06 28 4
gpt4 key购买 nike

我有 Tibco EMS 服务器、一些主题和该主题的持久订阅数量(每个主题都超过一个)。我的任务是删除(通过以适当的确认模式接收它们)特定持久订阅者的消息。我的问题:是否可以通过用我自己的订阅者(具有相同的名称、ID)“替换”它来管理订阅者的待处理消息?重要的是不要影响主题的待处理消息,换句话说,从一个主题订阅中删除一些消息,但将这些消息保留在其他主题(相同主题)订阅中。

最佳答案

嗯,我已经找到答案了,只是之前忘记贴出来了。

如前所述,在问题本身下,没有办法删除主题中的消息。但我的任务几乎没有什么不同:删除特定持久 订阅下的消息。这是真实的(在某些条件下)。

比方说,您必须从持久 订阅“MySubscr”中删除消息。为此,您应该创建连接并创建具有相同名称“MySubscr”的持久订阅者。但这还不够。如果您只是这样做,那么将创建另一个具有相同名称但连接不同 ClientID 的持久订阅者。它将作为独立的持久连接运行,对所需的“MySubscr”持久连接没有任何影响(实际上,它们看起来像 MySubscr:123 和 MySubscr:567 持久订阅,其中 123 和 567 是 ClientID,至少对于 TibcoEMS 是这样)。要修复它,您应该通过 connection.setClientID() 方法将 ClientID 显式设置为您的连接,但只有在初始连接未连接时才能这样做(这就是为什么我注意到 durable 订阅者,它可以在没有订阅者连接的情况下累积消息)。

所以你应该等到订阅者自己断开连接(TibcoEMS 的isConnected() 方法,我在 JMS API 中没有看到类似的方法,但假设大多数实现都有一些东西像这样)或手动破坏连接(与某些 ClientID)(来自 TibcoEMS 的TibjmsAdmin.destroyConnection() 方法)。然后将 ClientID 设置为您的连接并访问该订阅者的消息。您可以通过使用 Acknowledge 模式客户端(然后它们将保留在主题中)或自动模式(然后它们将被删除)来阅读消息。

重要说明:您不能消费某些消息,所有消息都像队列一样消费,因此您只能一条一条地消费。如果您发现一些不需要的消息并希望删除它(通过使用自动确认模式或通过调用消息上的 acknowledge() 方法),那么您将丢失所有先前的消息。 AFAIK,如果不删除之前的消息,就无法删除消息。

另一个重要说明:当您执行消息魔术时,重要的是初始客户端在您的连接未关闭之前不要再次连接,因为它将获得 DublicateClientIDException(如果它正在使用特定的 ClientID),否则它将创建另一个无法访问来自订阅的先前消息的持久订阅。

关于java - 从特定的持久 Tibco EMS 订阅中删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611376/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com