Ограничьте конечную точку tcp netty4 одним экземпляром - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть фиктивная конечная точка на 8001, которая будет отображать все, что ему предоставлено.У меня есть конечная точка http, которая отправит конец URL в фиктивную конечную точку и предоставит ответ от ответа конечной точки.Это работает нормально.

Проблема в том, что я хочу, чтобы по маршруту http использовалось только 1 TCP-соединение с конечной точкой 8001.

Я создал рабочую группу, как описано в другом месте, и установил количество рабочих.1. Просматривая исходный код, я думаю, что этот подход должен работать.

Однако, когда я делаю эту команду bash:

for a in {1..5}; do curl "http://localhost:8080/upstream/REQUESTNUM$a"  > $a.txt &  done;

Я вижу несколько подключений к 8001. Я ожидал, что запросы конечной точки http должны будут совместно использовать одного работника пула, но этоПохоже, это не так.

Возможно, я что-то упустил, или, возможно, есть другой способ достичь моей цели - использовать только 1 внутреннее tcp-соединение для всех запросов http.

Как мне это сделать?

<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                                                             
<beans xmlns="http://www.springframework.org/schema/beans"                                                                                                                                                         
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                                                                                                                                                          
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                                                                                   
    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">                                                                                                                 
    <camelContext                                                                                                                                                                                                  
        xmlns="http://camel.apache.org/schema/spring">                                                                                                                                                             

        <route id="mockUpstream">                                                                                                                                                                                  
            <from                                                                                                                                                                                                  
                uri="netty4:tcp://localhost:8001?sync=true&amp;textline=true&amp;keepAlive=true&amp;disconnect=false&amp;reuseChannel=true" />                                                                     
            <log message="Incoming to upstream: ${body}" />                                                                                                                                                        
            <transform>                                                                                                                                                                                            
                <simple>${body}</simple>                                                                                                                                                                           
            </transform>                                                                                                                                                                                           
        </route>                                                                                                                                                                                                   

        <route id="httpServer">                                                                                                                                                                                    
            <from                                                                                                                                                                                                  
                uri="netty4-http:http://0.0.0.0:8080/upstream?matchOnUriPrefix=true" />                                                                                                                            
            <!-- optional just use CamelHttpQuery from header, for full query -->                                                                                                                                  
            <log                                                                                                                                                                                                   
                message="Incoming http command: ${in.headers[CamelHttpPath]}" />                                                                                                                                   
            <transform>                                                                                                                                                                                            
                <simple>${in.headers[CamelHttpPath]}</simple>                                                                                                                                                      
            </transform>                                                                                                                                                                                           
            <to                                                                                                                                                                                                    
                uri="netty4:tcp://localhost:8001?workerGroup=#sharedPool&amp;sync=true&amp;textline=true&amp;keepAlive=true&amp;disconnect=false&amp;reuseChannel=true" />                                         
            <transform>                                                                                                                                                                                            
                <simple>${body}</simple>                                                                                                                                                                           
            </transform>                                                                                                                                                                                           
        </route>                                                                                                                                                                                                   

    </camelContext>                                                                                                                                                                                                

    <bean id="poolBuilder"                                                                                                                                                                                         
        class="org.apache.camel.component.netty4.NettyWorkerPoolBuilder">                                                                                                                                          
        <property name="workerCount" value="1" />                                                                                                                                                                  
    </bean>                                                                                                                                                                                                        

    <bean id="sharedPool" class="io.netty.channel.EventLoopGroup"                                                                                                                                                  
        factory-bean="poolBuilder" factory-method="build"                                                                                                                                                          
        destroy-method="shutdown">                                                                                                                                                                                 
    </bean>                                                                                                                                                                                                        
</beans>  

1 Ответ

0 голосов
/ 11 декабря 2018

Глядя на журналы, при ведении журнала уровня TRACE я обнаружил, что пул NettyProducer действительно был настроен на использование максимально 1 активного соединения, но NettyProducer было разрешено 100 незанятых соединений.Я изменил следующую строку, и теперь она ведет себя, как и ожидалось:

   <to                                                                 
        uri="netty4:tcp://localhost:8001?workerGroup=#sharedPool&amp;sync=true&amp;textline=true&amp;keepAlive=true&amp;disconnect=false&amp;reuseChannel=true&amp;producerPoolMaxActive=1&amp;producerPoolMaxIdle=1" />

Я предположил, что настройки «продюсера» были хороши только для стороны производителя (netty in mock host route) соединения, но это выглядиткак, например, они могут быть использованы конечным пользователем (нетто в http-маршруте).

edit: я перепутал термины "производитель" и "потребитель" и понял это задом наперед.Видя, что элемент "to" создает запрос на что-то, что нужно использовать, для параметров * производителя есть смысл (netty в http route).(Netty in mock host route) является потребителем запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...