我在我的项目中使用camel-hystrix-eip,我想在我的后备之前使用处理器,但它无法正常工作
from("direct:sample").id("id:direct:sample").process(requestProcessor)
.hystrix()
.to(endPoint)
.onFallbackViaNetwork()
.to(fallback_endPoint)
我想使用处理器更改我的fallback_endpoint,但似乎在FallbackViaNetwork()
之后我们必须立即提供to()
。
如果有任何办法,请建议。
我尝试了类似下面的内容,但它无法正常工作。
from("direct:sample").id("id:direct:sample").process(requestProcessor)
.hystrix()
.to(endPoint)
.onFallbackViaNetwork()
.process(fallbackProcessor)
.to(fallback_endPoint)
实际上,我使用requestProcessor来覆盖实际端点,如果出现回退,fallback_endPoint
也会被覆盖,有没有办法避免这种情况。
答案 0 :(得分:1)
您可以在onFallbackViaNetwork()
之后拥有处理器。您还可以使用toD
EIP将消息发送到动态端点。
根据您的代码,您可以设置包含新端点字符串的标头MyEndpoint
,然后使用.toD("${header.MyEndpoint}")
引用它。需要设置动态端点时重复此模式。
例如:
from("direct:sample")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// do something
exchange.getIn().setHeader("EndpointHystrix", "mock:hystrix");
}
})
.hystrix()
.toD("${header.EndpointHystrix}")
.onFallbackViaNetwork()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
// do something more
exchange.getIn().setHeader("EndpointFallback", "mock:fallback");
}
})
.toD("${header.EndpointFallback}")
.end()
.to("...");
我在Camel 2.20.0和2.21.0中测试了这个。