Я использую 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&rabbitmq.server.port=5672&rabbitmq.server.user.name=username&rabbitmq.server.password=password&rabbitmq.queue.name=queue&rabbitmq.server.virtual.host=/virtual-host&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>
Знаете ли вы, как решить эту проблему? большое спасибо