WSO2 rabbitMQ - каналы созданы и не закрыты - проблема утечки памяти - PullRequest
0 голосов
/ 07 октября 2019

Я использую WSO2 ESB с RabbitMQ, у меня есть одна прокси-служба и одна последовательность.

Прокси-служба работает как потребитель для очереди RabbitMQ (через транспорт rabbitmq), использованные сообщения отправляются на конечную точку HTTP.

Последовательность работает как производитель для добавления действий в очередь, вызывая конечную точку.

У меня также есть API, который для каждого вызова вставляет в очередь. Все работает правильно, но каждый раз, когда мы вызываем API, в очереди кроликов создается много каналов без их закрытия, что вызывает проблему «утечки памяти» на машине с сервером Rabbit.

Мы пытались создать «прямой»обмен "" и "разветвление", но не решил проблему утечки памяти.

Ниже код последовательности :

<sequence name="add-insertqueue-tostore" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property name="FORCE_SC_ACCEPTED" scope="axis2" type="STRING" value="true"/>
    <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
    <call>
        <endpoint key="gov:endpoints/rabbit/insert-toqueue.xml"/>
    </call>
    <log level="full">
        <property name="Sequence" value="AddToQueue"/>
        <property name="step" value="Message inserted"/>
    </log>
    <property name="FORCE_SC_ACCEPTED" scope="axis2" type="STRING" value="false"/>
    <property name="OUT_ONLY" scope="default" type="STRING" value="false"/>
</sequence>

ниже кода конечной точки

<endpoint name="insert-toqueue" xmlns="http://ws.apache.org/ns/synapse">
    <address uri="rabbitmq:/AMQPProxy?rabbitmq.server.host.name=rabbit.server&amp;rabbitmq.server.port=5672&amp;rabbitmq.server.user.name=username&amp;rabbitmq.server.password=password&amp;rabbitmq.queue.name=queue&amp;rabbitmq.server.virtual.host=/virtual-host&amp;rabbitmq.exchange.name=exchange"/>
</endpoint>

ниже кода потребителя

<proxy name="rabbit-consumer" startOnLoad="true" trace="enable" transports="rabbitmq" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <property action="remove" name="SOAPAction" scope="transport"/>
            <property action="remove" name="WSAction" scope="transport"/>
            <property name="ContentType" scope="transport" type="STRING" value="application/json"/>
            <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <property name="HTTP_METHOD" scope="axis2" type="STRING" value="POST"/>
            <property expression="json-eval($.name)" name="name" scope="default" type="STRING"/>
            <property expression="json-eval($.surname)" name="surname" scope="default" type="STRING"/>
            <log level="full"/>
            <call-template target="my-template">
                <with-param name="name" value="{get-property('name')}" xmlns:ns="http://org.apache.synapse/xsd"/>
                <with-param name="surname" value="{get-property('surname')}" xmlns:ns="http://org.apache.synapse/xsd"/>
            </call-template>
            <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
    <parameter name="rabbitmq.exchange.type">fanout</parameter>
    <parameter name="rabbitmq.exchange.name">exchange</parameter>
    <parameter name="rabbitmq.queue.name">queue</parameter>
    <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
</proxy>

Знаете ли вы, как решить эту проблему? большое спасибо

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы пытались перезагрузиться?

Обычно это работает.

Пока

0 голосов
/ 11 октября 2019

При настройке отправителя RabbitMQ, возможно, вы можете попробовать "кэшировать" один.

<transportSender name="rabbitmq" class="org.apache.axis2.transport.rabbitmq.RabbitMQSender">
   <parameter name="CachedRabbitMQConnectionFactory" locked="false">
     <parameter name="rabbitmq.server.host.name" locked="false">localhost</parameter>
     <parameter name="rabbitmq.server.port" locked="false">5672</parameter>
     <parameter name="rabbitmq.server.user.name" locked="false">user</parameter>
     <parameter name="rabbitmq.server.password" locked="false">abc123</parameter>
   </parameter>
</transportSender>

Ссылка на документ: https://docs.wso2.com/display/EI611/RabbitMQ+AMQP+Transport

...