WSo2:Rabbitmq 是否可以在没有代理的情况下从序列中重新排队
WSo2: Rabbitmq is it possible to requeue from sequence without proxy
我正在研究简单的 Wso2 RabbitMQ 集成。我的入站端点使用消息并将其发送到序列。然后序列存储消息。另一个正在记录错误的失败序列。我正在尝试从序列中再次发送队列中的消息。
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>
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>
SalesOrderQueueErrorSeq
<?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>
@NMRhman,
我认为如果消息转到错误序列,您需要回滚事务。
您可以将以下内容添加到入站序列中吗?
<parameter name="rabbitmq.queue.auto.ack">false</parameter>
<parameter name="rabbitmq.queue.auto.delete">false</parameter>
此外,添加以下属性,指示回滚错误序列中的消息。
<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.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>
SalesOrderQueueErrorSeq
<?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>
请尝试以上操作并分享您的反馈。
我正在研究简单的 Wso2 RabbitMQ 集成。我的入站端点使用消息并将其发送到序列。然后序列存储消息。另一个正在记录错误的失败序列。我正在尝试从序列中再次发送队列中的消息。
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>
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>
SalesOrderQueueErrorSeq
<?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>
@NMRhman,
我认为如果消息转到错误序列,您需要回滚事务。
您可以将以下内容添加到入站序列中吗?
<parameter name="rabbitmq.queue.auto.ack">false</parameter>
<parameter name="rabbitmq.queue.auto.delete">false</parameter>
此外,添加以下属性,指示回滚错误序列中的消息。
<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.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>
SalesOrderQueueErrorSeq
<?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>
请尝试以上操作并分享您的反馈。