繁体   English   中英

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

[英]Delete messages from specific durable Tibco EMS subscription

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

好吧,我找到了答案,只是忘了发布。

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

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

因此,您应该等到订阅者自行断开连接(TibcoEMS的isConnected()方法,我在JMS API中没有看到类似的方法,但是假设大多数实现都具有类似内容)或手动销毁连接(使用某些ClientID)( TibcoEMS的TibjmsAdmin.destroyConnection()方法)。 然后,将ClientID设置为您的连接,并访问该订户的消息。 您可以通过使用确认模式客户端(然后它们将保留在主题中)或使用自动模式(然后将它们删除)来使用它们来阅读消息。

重要说明:您不能使用某些特定的消息,所有消息都像在队列中一样被使用,因此只能一一处理。 如果您发现了一些不需要的消息并希望将其删除(通过使用自动确认模式进行使用或通过对消息进行调用accept ()方法),则会丢失所有先前的消息。 AFAIK,如果不删除先前的邮件,则无法删除邮件。

另一个重要说明:在执行消息魔术时,重要的是初始客户端在连接关闭之前不要再次连接,因为它将得到DublicateClientIDException(如果正在使用某些ClientID),否则将创建另一个Durable Subscription将无法访问该订阅中的先前消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM