activeMq 消息头中缺少密钥
Missing key in messageheader in activeMq
消息可以成功发送到ActiveMq。在activeMq webconsole查看消息时,在"Properties" table中只能找到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)
您示例中 header 之间的区别在于 "key2" 和 "key3" 需要序列化。我在这里看到 3 种可能性:
- Spring集成不发送headers
- AMQ 没有 accept/drops headers
- AMQ 控制台不会显示 headers 如果它们是字节流而不是 String/primitives
我会尝试通过首先在 SI 级别启用日志记录来逐一消除可能性,以确保正在发送 headers。然后我会在一个简单的客户端中记录传入的消息(例如,在 SI 中使用 "wire-tap" 来记录适配器)以确保收到 headers。如果第一个为真但第二个为假,则问题将出在经纪人级别的某个地方。在这种情况下,您将有两个选择 - 尝试找出 AMQ 问题或使用 String header 值而不是可序列化的值。这将不是完全相同的方法,但可以让您获得相同的结果。
JMS javadoc 指出:
属性 值可以是 boolean、byte、short、int、long、float、double 和 String。
据推测,activemq 悄悄地删除了不合规的值。
消息可以成功发送到ActiveMq。在activeMq webconsole查看消息时,在"Properties" table中只能找到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)
您示例中 header 之间的区别在于 "key2" 和 "key3" 需要序列化。我在这里看到 3 种可能性:
- Spring集成不发送headers
- AMQ 没有 accept/drops headers
- AMQ 控制台不会显示 headers 如果它们是字节流而不是 String/primitives
我会尝试通过首先在 SI 级别启用日志记录来逐一消除可能性,以确保正在发送 headers。然后我会在一个简单的客户端中记录传入的消息(例如,在 SI 中使用 "wire-tap" 来记录适配器)以确保收到 headers。如果第一个为真但第二个为假,则问题将出在经纪人级别的某个地方。在这种情况下,您将有两个选择 - 尝试找出 AMQ 问题或使用 String header 值而不是可序列化的值。这将不是完全相同的方法,但可以让您获得相同的结果。
JMS javadoc 指出:
属性 值可以是 boolean、byte、short、int、long、float、double 和 String。
据推测,activemq 悄悄地删除了不合规的值。