我们可以在camel-hystrix-eip中的onFallbackViaNetwork()之前提供处理器吗?

时间:2018-05-28 10:38:14

标签: apache-camel hystrix

我在我的项目中使用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也会被覆盖,有没有办法避免这种情况。

1 个答案:

答案 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中测试了这个。