Я сделал простую прокси-службу, которая прослушивает XML-сообщение из очереди JMS (на основе ActiveMQ) и выполняет некоторые преобразования на нем. Я хочу реализовать свойство возврата транзакции JMS, поэтому, если во время преобразования возникнет какая-либо ошибка или исключение, сообщение будет RollBack.Свойство переноса транзакций JMS не работает в WSO2 4.8.1 ESB
Проблема:
Я следовал official инструкции, но он не работает. Когда происходит какое-либо исключение, сообщение не откатывается. Исключение записывается, но сообщение теряется.
Proxy Service SourceCode:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="JMSGateway"
transports="jms"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="OUT_ONLY" value="true"/>
<log level="full"/>
<xslt key="conf:/xslt/ConvertToCDM.xslt">
<resource location="conf:xslt/ConvertToCDM.xslt" key="ConvertToCDM"/>
</xslt>
<log level="full"/>
<log/>
</inSequence>
<outSequence/>
<faultSequence>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
<log level="custom">
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
<property name="ERROR_DETAIL" expression="get-property('ERROR_DETAIL')"/>
<property name="ERROR_EXCEPTION" expression="get-property('ERROR_EXCEPTION')"/>
<property name="File_Name" expression="get-property('Received.File.Name')"/>
<property name="Transaction Action" value="Rollbacked"/>
</log>
</faultSequence>
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>application/xml</default>
</rules>
</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
<parameter name="transport.jms.DestinationType">queue</parameter>
<parameter name="transport.jms.Destination">CDMRequest</parameter>
<description/>
</proxy>
я попробовал это, но до сих пор никаких действий ... –
, когда вы попробуете, вы не имеете исключение внутри inSequence посредничества и вы можете увидеть журнал «Сделку Действие = Откат "из faultSequence? И ваше сообщение потеряно: нет сообщения в очереди CDMRequest, нет сообщения в ActiveMQ.DLQ? –
Служба переходит в последовательность сбоев, и да, я вижу тег «Транзакция Action = Откат», но сообщение потеряно. –