您将如何使用 Java 在 WebSphere MQ 中实现内容丰富器?
给定从队列中提供的现有输入消息,以下是我的一些想法,其中没有一个让我满意:
- 深层克隆消息对象。这是如何完成的解释,但我也找不到
clone()
或serialize()
javax.jms.Message 类的方法。 - 获取原始消息,使用
setXXXProperty()
设置其他属性并发送向前。这将引发一个异常,表明该消息是只读。 - 创建新消息,循环访问现有消息并将其设置为新消息。
getPropertyNames()
可以帮助做到这一点,但它没有说明属性的类型,因此此信息将丢失。
简而言之,IBM 集成总线可以在消息流中做到这一点...但让我也提供一个WMQ Java的答案:
接收的消息对象可以修改并发回...您需要做的就是将消息中所需的所有内容读取到某个 java 对象中。例如,您可以使用属性地图。然后调用 clearProperties() 并设置修改后的属性。调用 clearProperties() 后,只读问题消失了 (http://docs.oracle.com/javaee/5/api/javax/jms/Message.html#clearProperties%28%29)
因此,(2)和(3)的混合可以帮助解决问题。