在骆驼单元测试中的存根JMS端点上设置JMSMessageID

问题描述

我有一条正在测试的路线。我使用stub://jms:queue:whatever发送/接收消息,并为测试类扩展CamelTestSupport。我遇到的一条路由有一个问题,该路由有一个使用幂等回购协议通过“消息ID”存储消息的bean,它从交换中读取并存储JMSMessageID属性

我遇到的问题是,我找不到在存根端点上发送的消息上设置此属性方法。每次调用需要此道具的方法时,id返回null,而我必须将其作为null指针处理。我可以这样做,但是最干净的方法是只在测试消息上设置标头。我在端点上尝试了includeSentJMSMessageId=true,在生产者上尝试使用了sendBodyAndHeader并在参数中传递了"JMSMessageID","ID: whatever",这似乎不起作用吗?我读到驱动程序/连接工厂应该设置标头,但我不太了解如何/在何处执行此操作。而且由于我使用的是终端节点,所以我不会在ut中创建任何代理/连接工厂。

解决方法

JMSMessageID只能由提供者设置。尽管javax.jms.MessagesetJMSMessageId()的事实,客户端仍无法设置。正如the JavaDoc所述:

此方法仅供JMS提供程序使用,以便在发送消息时设置此字段。客户端不能使用此消息来配置消息ID。此方法是公共的,允许JMS提供程序在发送其实现不是其自己的消息时设置此字段。

,

所以不要研究JMS组件,不要用处理器替换它,然后在处理器中添加首选的JMSMessageID。

类似下面的代码:

<script>
jQuery(document).ready(function($){
   $('input[type=range]').change(function() {
      $("form#search-form").submit();
   });
});
</script>