Apache camel 驼峰3-死信通道的动态uri

Apache camel 驼峰3-死信通道的动态uri,apache-camel,camel-jms,Apache Camel,Camel Jms,我正在尝试设置一个智能JMS死信通道,其中动态计算DLQ的最终uri,具体取决于原始队列名称(例如添加“.dead”后缀) 我在文档中看到,可以通过设置CamelJmsDestinationName标题 因此,我尝试了以下方法: DefaultErrorHandlerBuilder dlc = deadLetterChannel("jms:queue:dummy") .useOriginalMessage() .maximumR

我正在尝试设置一个智能JMS死信通道,其中动态计算DLQ的最终uri,具体取决于原始队列名称(例如添加“.dead”后缀)

我在文档中看到,可以通过设置
CamelJmsDestinationName
标题

因此,我尝试了以下方法:

DefaultErrorHandlerBuilder dlc = deadLetterChannel("jms:queue:dummy")
            .useOriginalMessage()
            .maximumRedeliveries(2);                
dlc.onPrepareFailure( exchange -> {
     // Override destination                                
     exchange.getMessage().setHeader("CamelJmsDestinationName", "jms:queue:test");                   
});
我尝试了许多不同的CamelJmsDestinationName值:

  • “jms:队列:测试”
  • “队列:测试”
  • “测试”
但它们都没有起作用;头被忽略,交换总是转到原始uri(“队列:虚拟”)

我做错了什么

我正在使用绑定到ArtemisActiveMQ代理的Camel 3.6和Camel-sjms2组件:

@Resource(mappedName = "java:/ConnectionFactory")
private static ConnectionFactory connectionFactory; 


@Produces
@ApplicationScoped
@Named("jms")
public final Sjms2Component createJmsComponent() {
    Sjms2Component component = new Sjms2Component();
    ConnectionResource pool = new ConnectionFactoryResource(poolSize, connectionFactory);
    component.setConnectionResource(pool);
    return component;      
}

我通常是在经纪人那里设置的。AMQ/Artemis允许您创建单个死信队列。因此,如果您有一个名为foo的队列,那么当队列foo上的消息失败时,代理将创建一个DLQ.foo队列。这里就是一个例子