该消息可以成功发送到ActiveMq。在activeMq webconsole中检查消息时,只能在“属性”表中找到key1和key4(假设它是消息头),错过了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)
答案 0 :(得分:0)
示例中标题之间的区别在于&#34; key2&#34;和&#34; key3&#34;需要序列化。我在这里看到了3种可能性:
我会尝试首先通过启用SI级别的日志记录来逐个消除可能性,以确保正在发送标头。然后,我将传入的消息记录在一个简单的客户端中(例如,使用&#34; wire-tap&#34;到SI中的日志记录适配器)以确保正在接收标头。如果第一个为真,但第二个为假,则问题将出现在经纪人级别。在这种情况下,您将有两个选项 - 尝试找出AMQ问题或使用String头值而不是可序列化值。这不是完全相同的方法,但它将允许您实现相同的结果。
答案 1 :(得分:0)
JMS javadoc声明:
属性值可以是boolean,byte,short,int,long,float,double和String。
据推测,activemq会默默地删除不合规的值。