Spring activeMq中messageheader中缺少密钥

Spring activeMq中messageheader中缺少密钥,spring,jms,activemq,Spring,Jms,Activemq,消息可以成功发送到ActiveMq。在activeMq webconsole中检查消息时,在“属性”表中只能找到key1和key4(假设它是messageheader),缺少key2和key3 是什么引起的?有什么想法吗 import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; import org.springframework.integrati

消息可以成功发送到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)
import org.springframework.integration.Message;
导入org.springframework.integration.MessageChannel;
导入org.springframework.integration.MessageHeaders;
导入org.springframework.integration.message.GenericMessage;
@自动连线
消息通道msgChannel;
...
Map headers=newhashmap();
标题。put(“键1”、“值1”);
headers.put(“key2”,Utils.strotate(“20120531”,“yyyyymmdd”);
//FileWorkInfo是不可变的,可实现序列化
headers.put(“key3”,新文件工作信息(“abc.txt”);
标题。放置(“键4”,3);
MessageHeaders-msgheader=新的MessageHeaders(headers);
GenericMessage msg=新的GenericMessage(“测试”,msgheader);
//消息头中有所有预期的键
msgChannel.send(msg)

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

  • Spring集成不发送头
  • AMQ不接受/删除标题
  • 如果标题是字节流而不是字符串/原语,AMQ控制台不会显示标题

  • 我将尝试通过首先启用SI级别的日志记录来逐个消除这种可能性,以确保发送头。然后,我将在一个简单的客户机中记录传入消息(例如,在SI中使用“wire tap”来记录适配器),以确保接收到头。如果第一个是正确的,而第二个是错误的,那么问题将出现在经纪人层面。在这种情况下,您将有两个选项—尝试并解决AMQ问题,或者使用字符串头值而不是可序列化的值。这将不是完全相同的方法,但它将允许您实现相同的结果。

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

  • Spring集成不发送头
  • AMQ不接受/删除标题
  • 如果标题是字节流而不是字符串/原语,AMQ控制台不会显示标题
  • 我将尝试通过首先启用SI级别的日志记录来逐个消除这种可能性,以确保发送头。然后,我将在一个简单的客户机中记录传入消息(例如,在SI中使用“wire tap”来记录适配器),以确保接收到头。如果第一个是正确的,而第二个是错误的,那么问题将出现在经纪人层面。在这种情况下,您将有两个选项—尝试并解决AMQ问题,或者使用字符串头值而不是可序列化的值。这将不是完全相同的方法,但它将允许您实现相同的结果。

    JMS javadoc声明:

    属性值可以是布尔值、字节值、短值、int值、长值、浮点值、双精度值和字符串

    据推测,activemq会自动删除不符合要求的值。

    JMS javadoc声明:

    属性值可以是布尔值、字节值、短值、int值、长值、浮点值、双精度值和字符串

    据推测,activemq会自动删除不符合要求的值