Надежность и время работы ESB + RabbitMQ: как автоматически создавать удаленный обмен во время выполнения

У меня есть приложение "Большой мул", которое получает по нескольким очередям и публикует хотя бы на один обмен. Я вручную проверяю приложение, удаляя очереди и обмены, чтобы посмотреть, не попытается ли мул снова подключиться (и вообще отключить кролика).

Этот вопрос для того, когда обмен удален. Сообщения попадают в заблокированную анонимную очередь с именем что-то вроде: amq.gen-gFs6-7sP2nw1ntgobO6cBg

Я ищу способ восстановить связь и все еще проходить через сообщения. Это вообще возможно?

Я установил такие параметры, как exchangeDurable="true"queueDurable="true"

Есть ли какие-либо другие вещи (или конфиги кролика), которые мне нужно сделать, или они будут полезны для меня?

Следующий тест: завершение работы RabbitMQ в середине обработки.

Код:

<mule xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core" 
xmlns:amqp="http://www.mulesoft.org/schema/mule/amqp" 
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" 
xmlns:file="http://www.mulesoft.org/schema/mule/file" 
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/jdbc http://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/amqp http://www.mulesoft.org/schema/mule/amqp/current/mule-amqp.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd"
xmlns:context="http://www.springframework.org/schema/context">

<amqp:connector name="amqpAutoAckLocalhostConnector"
      host="${config.status_reporting.host}"
      port="${config.status_reporting.port}"
      virtualHost="${config.status_reporting.virtual_host}"
      username="${config.status_reporting.username}"
      password="${config.status_reporting.password}"
      requestedHeartbeat="${config.status_reporting.requestedHeartbeat}"
      doc:name="AMQP Connector for Status Messages"/>



<flow name="send_status" doc:name="send_status">        
    <vm:inbound-endpoint path="send_status" exchange-pattern="one-way" responseTimeout="10000" doc:name="VM" />
    <logger message="starting send status" level="DEBUG" doc:name="Logger"/>

    <!-- some code here has been removed for stackru question --> 

    <flow-ref name="cwm_send" doc:name="flow ref"/>
</flow>



<flow name="cwm_send" doc:name="cwm_send">
    <amqp:outbound-endpoint exchangeName="${config.status_reporting.exchange_name}"
                      exchangeType="topic"                        
                      exchangeDurable="${config.status_reporting.exchange_is_durable}"
                      routingKey="${config.status_reporting.routing_key}"
                      connector-ref="amqpAutoAckLocalhostConnector" doc:name="AMQP Out" queueDurable="true" responseTimeout="10000"/>          
</flow>



<flow name="send_ingest_status" doc:name="send_ingest_status">
    <vm:inbound-endpoint exchange-pattern="request-response" responseTimeout="10000" doc:name="VM" path="send_ingest_status"/>
    <vm:outbound-endpoint path="send_status" exchange-pattern="one-way" doc:name="Send Status">
        <set-payload value="#[[
            'status_code': 'foo',
            'status_descr': 'test description.',
            'status_final': '0',    
            'version': '1.0']]"/>
    </vm:outbound-endpoint>

</flow>
</mule>

Спасибо.

1 ответ

Эта проблема также возникает, когда обмен объявляется только в исходящей конечной точке. В Mulesoft JIRA есть открытая ошибка, связанная с этим, и вы можете проголосовать за нее, чтобы помочь им расставить приоритеты.

Я взглянул на исходный код, и проблема, похоже, заключается в том, что просто нет кода для объявления обменов при запуске исходящей конечной точки. В вашем случае вы, вероятно, захотите, чтобы код выполнялся во время отправки сообщения или, возможно, во время удаления обмена. Это время не будет покрыто вышеупомянутой ошибкой, но вы можете открыть новую проблему, описывающую вариант использования и желаемую функциональность. И запрос на получение, вероятно, будет еще лучше!;)

Другие вопросы по тегам