元のキュー名に応じて、DLQ の最終的な uri が動的に計算されるスマート JMS deadLetterChannel をセットアップしようとしています (たとえば、「.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;
}