1

我正在尝试设置一个智能 JMS deadLetterChannel,其中动态计算 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(“queue:dummy”)。

我究竟做错了什么 ??

我正在使用绑定到Artemis ActiveMQ 代理的 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;      
}
4

0 回答 0