Можем ли мы предоставить процессор перед onFallbackViaNetwork () в camel-hystrix-eip - PullRequest
0 голосов
/ 28 мая 2018

Я использую Camel-Hystrix-Eip в моем проекте, я хочу процессор до моего отката, но он не работает

from("direct:sample").id("id:direct:sample").process(requestProcessor)
                .hystrix()
                .to(endPoint)
                .onFallbackViaNetwork()
                .to(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 голосов
/ 30 мая 2018

Вы можете иметь процессор после 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.

...