问题描述
我一直在事件通知程序下的交换创建事件中使用生产者模板中的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);
希望这对以后的人有帮助。