Exchange.NOTIFY_EVENT camel 3.4 中弃用的交换选项,正在寻找替代方案

Exchange.NOTIFY_EVENT exchange option deprecated in camel 3.4 and looking for alternative

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

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

有人可以告诉我 camel 3.4 中的替代项是什么,相当于 Exchange.NOTIFY_EVENT 吗?如果有人对此提供一些见解,我们将不胜感激!..

更新时间:10/28/2020:

我看到 Exchange.NOTIFY_EVENT 已被弃用,并将其移至名为 ExtendedExchange 的新交易所。现在这个交换可以适应 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 方法创建了新的交换并将 属性 设置为不通知。

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

我们该怎么做?有人可以帮我解决这个问题吗?我们有任何替代方法来做到这一点吗?

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

我们只需要将此标志设置为不通知,但此方法位于作为 camel 3 及更高版本的一部分新引入的 extendedContext 中。我正在使用骆驼 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);

希望这对以后的人有所帮助。