当前位置: 首页 > 知识库问答 >
问题:

在WSO2 ESB 4.7.0中,我们可以按接收顺序进行JMS回滚吗?

丘学海
2023-03-14

我已经在WSO2 ESB 4.7.0中使用transaction和CLIENT_ACKNOWLEDGE配置了Apache ActiveMQ。axis2.xml配置如下:

<parameter name="transport.jms.SessionTransacted">true</parameter>
<parameter name="transport.jms.SessionAcknowledgement" locked="true">CLIENT_ACKNOWLEDGE</parameter>
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="MediaMoveQueue"
   transports="jms"
   startOnLoad="true"
   trace="enable">
<description/>
<target>
  <inSequence>
     <property name="messageType" value="application/json" scope="axis2"/>
     <property name="ContentType" value="application/json" scope="axis2"/>
     <send receive="JmsRollbackSequence">
        <endpoint>
           <address uri="http://192.168.1.2:9766/RestMediaMove_1.0.0/services/rest_media_move_i_f/restmediamoveif/hello"/>
        </endpoint>
     </send>

     <log level="custom">
        <property name="In MediaMoveQueue JMSERROR"
                  expression="get-property('JMSERROR')"/>
     </log>


     <switch source="get-property('JMSERROR')">
        <case regex="true">
           <property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
           <log level="custom">
              <property name="In MediaMoveQueue Transaction Action"
                        value="Rollbacked"/>
           </log>
        </case>
        <case regex="false">
           <log level="custom">
              <property name="In MediaMoveQueue Transaction Action"
                        value="Committed"/>                  
           </log>
         </case>
         <default>
           <property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
           <log level="custom">
              <property name="In MediaMoveQueue Transaction Action default"
                        value="Rollbacked"/>
           </log>
        </default>
     </switch>
  </inSequence>
  <outSequence>
     <log level="full">
        <property name="test" value="IN outsequence"/>
     </log>
     <send/>
  </outSequence>
</target>
<parameter name="transport.jms.ContentType">
  <rules>
     <jmsProperty>contentType</jmsProperty>
     <default>application/json</default>
  </rules>
</parameter>
</proxy>
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="JmsRollbackSequence">
<property name="JMSERROR" value="true"/>
    <log level="full">
      <property name="test" value="IN JmsRollbackSequence"/>
     </log>

</sequence>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>

共有1个答案

薛华容
2023-03-14

我相信您只能从同一序列或与之关联的故障序列中控制事务。但是WSO2文档并没有真正提到这一点...

关于您的第二个问题:send mediator是非阻塞的,也就是说,在send mediator返回之前,将执行以下mediator。如果希望它等待响应,则需要使用标注中介器。然后,您可以评估响应并在需要时执行回滚(所有这些都在inSequence中)。

 类似资料:
  • 我们可以使用页面对象执行滚动吗? 实际上,我需要根据元素滚动网页(向上/向下)。如何使用页面对象执行。 我使用Selenium web drive来启动浏览器,并使用Page对象来自动化web页面。 有什么建议吗???

  • 我们有一些消息需要保持序列。我们已经决定将所有消息从一个特定的源发送到一个分区,这样就可以维护消息序列(多个源可以产生到同一个分区,但一个源不能产生到多个分区),并且我们将能够用它们的密钥标识每个源。 现在,我们需要使用这些消息并进行一些处理。我们对已消费的消息执行多个独立操作(例如,将它们存储在数据库中,转发它们等)。现在,我一直在考虑是使用Kafka Streams API还是消费者API来实

  • 问题内容: 如果我有这样的数据: 我如何将命令连接成这样: 我在下面使用了此查询,但命令列的顺序不依其顺序号而定: 任何意见和建议将不胜感激。^ _ ^ 问题答案: 永远不要使用。阅读为什么不在Oracle中使用WM_CONCAT函数? 请参阅本主题https://stackoverflow.com/a/28758117/3989608。 它没有记录,并且依赖的任何应用程序一旦升级到后都将无法工作

  • 问题内容: 我可以在事务中运行动态sql并使用EXEC进行回滚: 将其放入事务中,并在exec语句后使用@@ error进行回滚。 例如。代码 如果存在n条动态sql语句并且错误发生在n / 2中,则将回滚前1到((n / 2)-1)条语句 有关第一个答案的问题 @@ Error最有可能不会拾取错误,这意味着它可能不会拾取错误,这意味着事务可能会提交?达不到目的 SQL Server 2005+中

  • 问题内容: 在SQL中,有没有一种方法可以 按键组 顺序添加行号? 假设一个带有任意(CODE,NAME)元组的表。表格示例: 使用CODE作为分组属性的所需投影: 谢谢, 问题答案: SQL服务器 甲骨文 Postgres Sybase公司 MySQL不支持。这涵盖了大多数基地。

  • 问题内容: 我们可以在 finally 块中使用return语句吗?这会引起任何问题吗? 问题答案: 从块内部返回会导致丢失。 finally块中的return语句将导致任何在try或catch块中引发的异常都将被丢弃。 根据 Java语言规范: 如果由于任何其他原因R导致try块的执行突然完成,则执行finally块,然后可以选择: 注意:根据 JLS 14.17 ,return语句总是突然完成