1

我一直在生产者模板中使用 Exchange.NOTIFY_EVENT 选项,如下所示在事件通知程序下的交换创建事件中不再调用交换创建事件,当我使用骆驼 2.24 核心时它工作正常,但现在自从我升级到骆驼3.4.0,它不再工作了。看起来 Exchange.NOTIFY_EVENT 选项已弃用。

String response = (String) producerTemplate.sendBodyAndProperty("event",
                        ExchangePattern.InOut, inputPayload, Exchange.NOTIFY_EVENT, Boolean.TRUE);

有人可以让我知道骆驼 3.4 中有什么替代品,相当于 Exchange.NOTIFY_EVENT 吗?如果有人对此提供一些见解,将不胜感激!..

更新时间:2020 年 10 月 28 日:

我看到 Exchange.NOTIFY_EVENT 已被弃用,并将其移至名为ExtendedExchange的新交易所。现在这个exchange可以适配ExtendedExchange并且可以设置notifyEvent方法如下。

exchange.adapt(ExtendedExchange.class).setNotifyEvent(true);

但问题还没有解决。这是当前代码。

CamelContext context = exchange.getContext();
ProducerTemplate producerTemplate = context.createProducerTemplate();
Object obj = producerTemplate.sendBodyAndProperty("event",
                        ExchangePattern.InOut, inputPayload, Exchange.NOTIFY_EVENT, Boolean.TRUE);

我已经在使用 EventNotifierSupport 的 exchangeCreated 通知中,我想调用另一个不应再次创建通知的路由。这就是为什么我以前通过设置 exchange.NOTIFY_EVENT 属性来调用这种方式的原因。由于 sendBodyAndProperty 方法创建了新的交换并将属性设置为不通知。

但是现在文档说,我们需要使交换适应extendedExchange,并在其中将notifyEvent 设置为true。我的问题是,如果我们使用 sendBodyAndProperty 方法在内部创建交换,我们如何适应扩展交换。

我们该怎么做?有人可以帮我解决这个问题吗?我们有其他方法可以做到这一点吗?

4

1 回答 1

0

最后我找到了一个解决这个问题的解决方案,但不确定我们是否有任何其他简单的方法来解决它。但是,我会暂时接受这个。

我们只需将此标志设置为不通知,但此方法位于extendedContext 中,它是作为camel 3 及更高版本的一部分新引入的。我正在使用骆驼 3.4

camelContextExtended.setEventNotificationApplicable(false);

以下是完整代码

CamelContext context = exchange.getContext();

ModelCamelContext camelContext = context.adapt(ModelCamelContext.class);
ExtendedCamelContext camelContextExtended =context.adapt(ExtendedCamelContext.class);

camelContextExtended.setEventNotificationApplicable(false);

ProducerTemplate producerTemplate = context.createProducerTemplate();
Object obj = producerTemplate.sendBodyAndProperty("event",
                        ExchangePattern.InOut, inputPayload, Exchange.NOTIFY_EVENT, Boolean.TRUE);

camelContextExtended.setEventNotificationApplicable(true);

希望这对将来的某人有所帮助。

于 2020-10-29T02:16:24.497 回答