Производитель Apache Camel netty4 в режиме сервера - PullRequest
0 голосов
/ 31 мая 2018

Я использую компонент Apache Camel netty4 в режиме производителя с конечной точкой, настроенной следующим образом:

<from>
    <...>
</from>
<to>
    <endpoint:uriRouteEndpoint uri="netty4:tcp://127.0.0.1:12345"/>
</to>

При получении сообщения для отправки конечная точка netty действует как клиент TCP, лениво инициирующий соединение ссокет указан.

Есть ли простое решение, позволяющее ему вместо этого выступать в качестве сервера TCP, то есть ждать, пока клиентское программное обеспечение не установит и не установит соединение TCP перед отправкой сообщений?

1 Ответ

0 голосов
/ 31 мая 2018

Конечно, это возможно с Content Enricher EIP .Вы можете использовать pollEnrich для создания пула потребителя, ожидающего ввода.


Я создал модульный тест для демонстрации.

public class NettyEnrich extends CamelTestSupport {

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:in")
                        .pollEnrich("netty4:tcp://127.0.0.1:12345")
                        .to("mock:out");
            }
        };
    }

    @Test
    public void test() throws Exception{
        MockEndpoint mockEndpoint = getMockEndpoint("mock:out");
        mockEndpoint.setExpectedCount(1);

        template.asyncSendBody("direct:in",""); //direct:in is now waiting for connection from netty client
        template.sendBody("netty4:tcp://127.0.0.1:12345", "Hello from TCP"); //Initialize connection to resume direct:in

        mockEndpoint.assertIsSatisfied();
        Assert.assertEquals("Hello from TCP", mockEndpoint.getExchanges().get(0).getIn().getBody());
    }
}
...