【问题标题】:Missing key in messageheader in activeMqactiveMq 中的消息头中缺少键
【发布时间】:2015-07-09 21:05:17
【问题描述】:

消息可以成功发送到 ActiveMq。在activeMq webconsole中检查消息时,在“属性”表中只能找到key1和key4(假设是messageheader),key2和key3丢失了。

是什么原因造成的?有什么想法吗?

import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.MessageHeaders;
import org.springframework.integration.message.GenericMessage;

@Autowired
MessageChannel msgChannel;

...
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("key1", "value1");
headers.put("key2", Utils.StrToDate("20120531", "yyyyMMdd"));
//FileWorkInfo is inmutable and implemented Serializable
headers.put("key3", new FileWorkInfo("abc.txt"));
headers.put("key4", 3);
MessageHeaders msgheader = new MessageHeaders(headers);
GenericMessage<String> msg = new GenericMessage("Test", msgheader);
//the msg has all the expected keys in header here
msgChannel.send (msg)

【问题讨论】:

    标签: spring jms activemq


    【解决方案1】:

    JMS javadoc 状态:

    属性值可以是 boolean、byte、short、int、long、float、double 和 String。

    据推测,activemq 会默默地丢弃不合规的值。

    【讨论】:

      【解决方案2】:

      您示例中标题之间的区别在于“key2”和“key3”需要序列化。我在这里看到了 3 种可能性:

      1. Spring Integration 不发送标头
      2. AMQ 不接受/丢弃标头
      3. 如果标头是字节流而不是字符串/原语,AMQ 控制台不会显示标头

      我会尝试通过首先启用 SI 级别的日志记录来逐个消除可能性,以确保正在发送标头。然后我会在一个简单的客户端中记录传入的消息(例如,使用“窃听”来记录 SI 中的适配器)以确保接收到标头。如果第一个为真,但第二个为假,则问题将出在经纪人级别。在这种情况下,您将有两种选择 - 尝试找出 AMQ 问题或使用 String 标头值而不是可序列化的标头值。这不会是完全相同的方法,但可以让您获得相同的结果。

      【讨论】:

        猜你喜欢
        • 2018-03-06
        • 2016-10-27
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 2016-08-07
        • 1970-01-01
        相关资源
        最近更新 更多