WSo2:Rabbitmq是否可以在没有代理的情况下从序列重新排队

WSo2:Rabbitmq是否可以在没有代理的情况下从序列重新排队,wso2,wso2esb,Wso2,Wso2esb,我正在进行简单的Wso2 RabbitMQ集成。我的入站端点使用消息并将其发送到序列。然后序列存储消息。另一个正在记录错误的失败序列。我正在尝试从序列中再次发送队列上的消息 <property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/> SalesOrderQueueInboundEP <?xml ve

我正在进行简单的Wso2 RabbitMQ集成。我的入站端点使用消息并将其发送到序列。然后序列存储消息。另一个正在记录错误的失败序列。我正在尝试从序列中再次发送队列上的消息

<property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>
SalesOrderQueueInboundEP

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="SalesOrderQueueInboundEP" onError="SalesOrderQueueErrorSeq" protocol="rabbitmq" sequence="SalesOrderQueueProcessSeq" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
        <parameter name="rabbitmq.server.host.name">localhost</parameter>
        <parameter name="rabbitmq.server.port">5672</parameter>
        <parameter name="rabbitmq.server.user.name">guest</parameter>
        <parameter name="rabbitmq.server.password">guest</parameter>
        <parameter name="rabbitmq.queue.name">SalesOrderQueue</parameter>
        <parameter name="rabbitmq.exchange.name">amq.direct</parameter>
        <parameter name="rabbitmq.message.content.type">application/xml</parameter>
    </parameters>
</inboundEndpoint>

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="SalesOrderQueueInboundEP" onError="SalesOrderQueueErrorSeq" protocol="rabbitmq" sequence="SalesOrderQueueProcessSeq" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
        <parameter name="rabbitmq.server.host.name">localhost</parameter>
        <parameter name="rabbitmq.server.port">5672</parameter>
        <parameter name="rabbitmq.server.user.name">guest</parameter>
        <parameter name="rabbitmq.server.password">guest</parameter>
        <parameter name="rabbitmq.queue.name">SalesOrderQueue</parameter>
        <parameter name="rabbitmq.queue.auto.ack">false</parameter>
        <parameter name="rabbitmq.queue.auto.delete">false</parameter>
        <parameter name="rabbitmq.exchange.name">amq.direct</parameter>
        <parameter name="rabbitmq.message.content.type">application/xml</parameter>
    </parameters>
</inboundEndpoint>

真的
真的
AMQP连接工厂
本地服务器
5672
客人
客人
SalesOrderQueue
amq.direct
应用程序/xml
SalesOrderQueueProcessSeq

 <?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueProcessSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log payload" level="full"/>
    <property expression="json-eval($)" name="body_json_property" scope="default" type="STRING"/>
    <sequence key="SalesDBSeq"/>
</sequence>


<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
</sequence>

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
    
   <property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>
   
<drop/>
</sequence>

SalesOrderQueueErrorSeq

 <?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueProcessSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log payload" level="full"/>
    <property expression="json-eval($)" name="body_json_property" scope="default" type="STRING"/>
    <sequence key="SalesDBSeq"/>
</sequence>


<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
</sequence>

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
    
   <property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>
   
<drop/>
</sequence>

@NMRhman

我认为,如果消息进入错误序列,您需要回滚事务

<property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>
能否将以下内容添加到入站序列中

<parameter name="rabbitmq.queue.auto.ack">false</parameter>
<parameter name="rabbitmq.queue.auto.delete">false</parameter>
false
假的
另外,添加以下属性,该属性指示回滚错误序列中的消息

<property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>

修改序列如下

SalesOrderQueueInboundEP

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="SalesOrderQueueInboundEP" onError="SalesOrderQueueErrorSeq" protocol="rabbitmq" sequence="SalesOrderQueueProcessSeq" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
        <parameter name="rabbitmq.server.host.name">localhost</parameter>
        <parameter name="rabbitmq.server.port">5672</parameter>
        <parameter name="rabbitmq.server.user.name">guest</parameter>
        <parameter name="rabbitmq.server.password">guest</parameter>
        <parameter name="rabbitmq.queue.name">SalesOrderQueue</parameter>
        <parameter name="rabbitmq.exchange.name">amq.direct</parameter>
        <parameter name="rabbitmq.message.content.type">application/xml</parameter>
    </parameters>
</inboundEndpoint>

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="SalesOrderQueueInboundEP" onError="SalesOrderQueueErrorSeq" protocol="rabbitmq" sequence="SalesOrderQueueProcessSeq" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
        <parameter name="rabbitmq.server.host.name">localhost</parameter>
        <parameter name="rabbitmq.server.port">5672</parameter>
        <parameter name="rabbitmq.server.user.name">guest</parameter>
        <parameter name="rabbitmq.server.password">guest</parameter>
        <parameter name="rabbitmq.queue.name">SalesOrderQueue</parameter>
        <parameter name="rabbitmq.queue.auto.ack">false</parameter>
        <parameter name="rabbitmq.queue.auto.delete">false</parameter>
        <parameter name="rabbitmq.exchange.name">amq.direct</parameter>
        <parameter name="rabbitmq.message.content.type">application/xml</parameter>
    </parameters>
</inboundEndpoint>

真的
真的
AMQP连接工厂
本地服务器
5672
客人
客人
SalesOrderQueue
假的
假的
amq.direct
应用程序/xml
SalesOrderQueueErrorSeq

 <?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueProcessSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log payload" level="full"/>
    <property expression="json-eval($)" name="body_json_property" scope="default" type="STRING"/>
    <sequence key="SalesDBSeq"/>
</sequence>


<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
</sequence>

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="SalesOrderQueueErrorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="Log error details in case of failure" level="full">
        <property name="MESSAGE" value="An unexpected error occurred."/>
        <property expression="$ctx:SYNAPSE_REST_API" name="REST_API"/>
        <property expression="$ctx:ERROR_CODE" name="ERROR_CODE"/>
        <property expression="$ctx:ERROR_MESSAGE" name="ERROR_MESSAGE"/>
        <property expression="$ctx:ERROR_DETAIL" name="ERROR_DETAIL"/>
        <property expression="$ctx:ERROR_EXCEPTION" name="ERROR_EXCEPTION"/>
    </log>
    
   <property name="SET_ROLLBACK_ONLY" value="true" scope="default" type="STRING"/>
   
<drop/>
</sequence>


请尝试以上内容并分享您的反馈。

非常感谢您的回复。ERROR_EXCEPTION=,Envelope:所以,我故意将错误的DB连接池放入检查。基本上,我所追求的是将消息排队,直到它成功地存储在DB中。当它尝试将消息插入DB时,它会得到预期的“执行insert语句时出现SQL错误”。然后,由于遇到异常,它尝试执行错误处理程序。在此之后,我将获得该异常。@MMRahman当失败发生时,它将消息回滚到rabbitMQ队列。然后它将再次轮询并尝试将其存储在数据库中。因此,如果失败发生在持久级别,您可以确保消息不会被丢弃。@MMRahman您可以定义
3
,以便在丢弃消息之前设置最大重试次数。