问题描述
我有一条正在测试的路线。我使用stub://jms:queue:whatever
发送/接收消息,并为测试类扩展CamelTestSupport
。我遇到的一条路由有一个问题,该路由有一个使用幂等回购协议通过“消息ID”存储消息的bean,它从交换中读取并存储JMSMessageID属性。
我遇到的问题是,我找不到在存根端点上发送的消息上设置此属性的方法。每次调用需要此道具的方法时,id返回null,而我必须将其作为null指针处理。我可以这样做,但是最干净的方法是只在测试消息上设置标头。我在端点上尝试了includeSentJMSMessageId=true
,在生产者上尝试使用了sendBodyAndHeader
并在参数中传递了"JMSMessageID","ID: whatever"
,这似乎不起作用吗?我读到驱动程序/连接工厂应该设置标头,但我不太了解如何/在何处执行此操作。而且由于我使用的是终端节点,所以我不会在ut中创建任何代理/连接工厂。
解决方法
JMSMessageID只能由提供者设置。尽管javax.jms.Message
有setJMSMessageId()
的事实,客户端仍无法设置。正如the JavaDoc所述:
,此方法仅供JMS提供程序使用,以便在发送消息时设置此字段。客户端不能使用此消息来配置消息ID。此方法是公共的,允许JMS提供程序在发送其实现不是其自己的消息时设置此字段。
所以不要研究JMS组件,不要用处理器替换它,然后在处理器中添加首选的JMSMessageID。
类似下面的代码:
<script>
jQuery(document).ready(function($){
$('input[type=range]').change(function() {
$("form#search-form").submit();
});
});
</script>