gpt4 book ai didi

java - 删除 JMS 消息属性

转载 作者:行者123 更新时间:2023-12-02 08:48:58 25 4
gpt4 key购买 nike

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

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

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

目前,我可以看到两种解决方案:

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

  2. 读取所有属性并重建消息,而不使用导致问题的 2 个属性。但这种做法很丑陋……

还有其他解决办法吗?

最佳答案

无法编辑/清除某些属性。我们需要按照描述调用clearProperties方法here获得写入权限:

消息一旦生成(发送),其属性就变为只读;属性无法更改。虽然使用者可以使用属性访问器方法 (getProperty()) 读取属性,但他们不能使用任何修改器方法 (setProperty()) 修改属性。如果使用者尝试设置属性,则 mutator 方法将抛出 javax.jms.MessageNotWriteableException。

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

关于java - 删除 JMS 消息属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21183264/

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