繁体   English   中英

删除JMS消息属性

[英]Remove a JMS message property

我正在编写一个Java批处理,该批处理正在侦听来自队列(Oracle AQ)的消息,然后将它们发送到另一个队列(Tibco EMS),在那里它们由Tibco进程(BW)处理。

问题在于,Oracle AQ驱动程序会自动向消息(JMSXGroupID,JMSXGroupSeq)添加一些属性,这些属性在Tibco进程处理它们时会出错,因为它们的值不正确:JMSXGroupSeq应该为int,但设置为null。 尝试解析消息属性时,Tibco陷入错误...

所以我只想从所有消息中删除这2个属性,但是jms api似乎仅提供clearProperties()方法,但没有单个属性remove方法(我正在使用javax.jms.Message接口)。

现在,我可以看到两种解决方案:

  1. 为这两个属性设置正确的值,因为我假设Tibco将不再使用它们

  2. 读取所有属性,并重建没有导致问题的2的消息。 但是这种方法很难看...

有人还有其他解决方案吗?

无法编辑/清除某些属性。 我们需要按此处所述调用clearProperties方法来获得写访问权限:

产生(发送)消息后,其属性变为只读; 属性不能更改。 使用者可以使用属性访问器方法(getProperty())来读取属性,但不能使用任何变种方法(setProperty())来修改属性。 如果使用者尝试设置属性,则mutator方法将引发javax.jms.MessageNotWriteableException。

收到消息后,唯一可以更改其属性的方法是使用clearProperties()方法清除所有属性。 这将从消息中删除所有属性,以便可以添加新属性。 发送消息后,无法修改或删除单个属性。

在javax.jms.Message接口的具体类实现中将有一个函数public void removeProperty(String name) 此类是特定于提供程序的(在您的情况下为Tibco EMS)。 由于它是封闭源代码,因此我不确定该功能是否存在。 但是它存在于HornetQ中,可用于重置特定的标头属性。

除此之外,我认为选项1是最好的。 您将其设置为Tibco EMS的消息标头解析器可接受的一些非null值。

暂无
暂无

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

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