首页 > 解决方案 > 在骆驼单元测试中的存根 jms 端点上设置 JMSMessageID

问题描述

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

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

标签: unit-testingapache-cameljmsstub

解决方案


JMSMessageID 只能由提供者设置。尽管javax.jms.MessagesetJMSMessageId(). 正如JavaDoc所述:

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


推荐阅读