骆驼3.4中不推荐使用Exchange.NOTIFY_EVENT交换选项,正在寻找替代方案

问题描述

我一直在事件通知程序下的交换创建事件中使用生产者模板中的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 的新交易所。现在,此交换可以适应 ExtendedExchange 并可以如下设置notifyEvent方法

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

但问题尚未解决。这是当前代码

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

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

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

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

解决方法

最后,我找到了解决此问题的解决方案,但不确定我们是否还有其他简单的方法可以解决此问题。但是,我暂时不会这样做。

我们只需要将此标志设置为不通知即可,但是此方法是在ExtendedContext中引入的,这是骆驼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);

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...