问题描述
我在 Mule 4 中有一个非常基本的 ALWAYS_BEGIN
JMS 流和 LOCAL
事务,当我使用 Anypoint Studio 的“运行”或“调试”选项运行它时表现出不同的行为。
在流程中,我正在使用本地事务侦听 JMS 队列 (ActiveMQ),在此流程中,有一个数据库更新。此更新是使用事务选项 NOT_SUPPORTED
设置的。我使用这个配置的原因是数据库操作不能加入事务,除非我设置了 XA
个事务,而且我只是不需要这个数据库操作来加入正在进行的事务。
流程代码
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:bti="http://www.mulesoft.org/schema/mule/ee/bti"
xmlns:ibm-mq="http://www.mulesoft.org/schema/mule/ibm-mq"
xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/ee/bti http://www.mulesoft.org/schema/mule/ee/bti/current/mule-bti-ee.xsd
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/ibm-mq http://www.mulesoft.org/schema/mule/ibm-mq/current/mule-ibm-mq.xsd">
<db:config name="Database_Pool" doc:name="Database Config" doc:id="3976285e-04a2-47c9-9255-e2e86b950d1b" >
<db:oracle-connection host="${db.host}" port="${db.port}" user="${db.user}" password="${db.password}" serviceName="${db.name}">
<db:pooling-profile maxPoolSize="${db.pool.max}" maxIdleTime="30"/>
</db:oracle-connection>
</db:config>
<jms:config name="jmsConfig" doc:name="JMS Config" doc:id="f2abf6aa-918f-4b92-b2fc-441264dacbb0" >
<jms:active-mq-connection username="admin" password="admin" >
<jms:factory-configuration brokerUrl="tcp://localhost:61616?jms.prefetchPolicy.all=1" />
</jms:active-mq-connection>
</jms:config>
<configuration-properties doc:name="Configuration properties" doc:id="69522b3e-1ddb-4a8a-99c8-9f589c17cf67" file="configuration.properties" />
<flow name="queue1Flow1" doc:id="5903e842-1d73-4cbb-ab18-539d9c139a74" >
<jms:listener doc:name="On New Message" doc:id="6b9a1b13-be28-42c3-b738-a1d41fe20503" config-ref="jmsConfig" destination="q1" transactionalAction="ALWAYS_BEGIN"/>
<set-variable value="#[payload]" doc:name="Set Variable" doc:id="458cc4f4-8e50-4c4b-86cf-6f6434008b24" variableName="myVar"/>
<logger level="INFO" doc:name="Logger" doc:id="e5655210-8545-4804-9d6d-fcc8ba9c9961" message='"Message received"'/>
<try doc:name="Try" doc:id="19ca29c9-94f1-4567-8f47-686b5aa60ea4">
<set-variable value="#[payload]" doc:name="Set Variable 2" doc:id="fb1c34ec-46ae-4a6f-9558-001d586eea95" variableName="myVar2" />
<db:update doc:name="Update" doc:id="16b72660-06e2-4a6e-92ba-f8b33c77d216" config-ref="Database_Pool" queryTimeout="5" transactionalAction="NOT_SUPPORTED">
<db:sql><![CDATA[UPDATE PRODUCT SET CODE = 'UNKNowN ITEM' WHERE ID = 9]]></db:sql>
</db:update>
<error-handler>
<on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate" doc:id="868099d8-e5a9-4a60-be94-a1997636d3c0">
<logger level="INFO" doc:name="Logger" doc:id="65841e83-aff5-485e-87a6-4067e77db029" message='"Database operation Failed"' />
</on-error-propagate>
</error-handler>
</try>
<logger level="INFO" doc:name="Logger" doc:id="c9aaa765-0c24-4754-9c2d-69c82d108329" message='"And we are done!"'/>
</flow>
</mule>
当我调试应用程序时,流程会执行,并在流程结束时提交 JMS 事务并从队列中删除消息,并且在控制台日志中我看到类 org.mule.jms.commons.internal.connection.JmsTransactionalConnection
有一个条目表示 JMS 事务已提交,后跟 ActiveMQ 创建的条目,显示事务确实是如何提交的。
DEBUG 2021-03-08 11:28:38,655 [ActiveMQ Session Task-1] [processor: ; event: ] org.apache.activemq.TransactionContext: Begin:TX:ID:LX334321-56133-1615220909403-3:1:1
DEBUG 2021-03-08 11:28:38,656 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: Received message on session [Cached JMS Session: ActiveMQSession {id=ID:LX334321-56133-1615220909403-3:1:2,started=true} java.lang.Object@6d4a7e3a]
DEBUG 2021-03-08 11:28:38,657 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: New Message: MessageID [ID:LX334321-60739-1615210727247-4:3:1:1:18]. CorrelationID []
DEBUG 2021-03-08 11:28:38,679 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.session.JmsSessionManager: Binding transaction to current thread...
DEBUG 2021-03-08 11:28:38,679 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.session.JmsSessionManager: Tx to bind: session: 'org.mule.jms.commons.internal.source.push.JmsListenerSession@5f036c0'
DEBUG 2021-03-08 11:28:38,688 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.message.JmsResultFactory: Creating Result: specification:[1.1],type:[ActiveMQTextMessage],contentType:[*/*],encoding:[UTF-8]
DEBUG 2021-03-08 11:28:38,688 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.message.JmsResultFactory: Message type received is: ActiveMQTextMessage
DEBUG 2021-03-08 11:28:38,817 [ActiveMQ Session Task-1] [processor: ; event: ] com.mulesoft.mule.debugger.mule.notification.DebuggerPipelineMessageNotificationListener: Notification org.mule.runtime.api.notification.IntegerAction@728 was received
INFO 2021-03-08 11:28:38,882 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/1; event: ] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: "Message received"
DEBUG 2021-03-08 11:28:38,899 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/2/processors/1; event: ] com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool: Testing PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@266de0b] on CHECKOUT.
DEBUG 2021-03-08 11:28:38,965 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/2/processors/1; event: ] com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool: Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@266de0b] on CHECKOUT has SUCCEEDED.
INFO 2021-03-08 11:28:39,203 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/3; event: ] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: "And we are done!"
DEBUG 2021-03-08 11:28:39,221 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.JmsTransactionalConnection: JMS Transaction Commit over Session [Cached JMS Session: ActiveMQSession {id=ID:LX334321-56133-1615220909403-3:1:2,started=true} java.lang.Object@6d4a7e3a]
DEBUG 2021-03-08 11:28:39,221 [ActiveMQ Session Task-1] [processor: ; event: ] org.apache.activemq.ActiveMQSession: ID:LX334321-56133-1615220909403-3:1:2 Transaction Commit :TX:ID:LX334321-56133-1615220909403-3:1:1
DEBUG 2021-03-08 11:28:39,222 [ActiveMQ Session Task-1] [processor: ; event: ] org.apache.activemq.TransactionContext: Commit: TX:ID:LX334321-56133-1615220909403-3:1:1 syncCount: 1
DEBUG 2021-03-08 11:28:39,224 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.session.JmsSessionManager: Unbinding transaction from current thread...
但是当我使用 Anypoint Studio 的“运行”选项执行相同的流程时,永远不会执行提交。数据库被更新,流程的最后一个 logger
被执行,但事务从未提交,一旦我停止 ActiveMQ,消息就会移动到 DLQ。在这种模式下运行
DEBUG 2021-03-08 11:26:20,054 [ActiveMQ Session Task-1] [processor: ; event: ] org.apache.activemq.TransactionContext: Begin:TX:ID:LX334321-56020-1615220768598-3:1:1
DEBUG 2021-03-08 11:26:20,055 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: Received message on session [Cached JMS Session: ActiveMQSession {id=ID:LX334321-56020-1615220768598-3:1:2,started=true} java.lang.Object@5e1f53c1]
DEBUG 2021-03-08 11:26:20,055 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: New Message: MessageID [ID:LX334321-60739-1615210727247-4:3:1:1:17]. CorrelationID []
DEBUG 2021-03-08 11:26:20,070 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.session.JmsSessionManager: Binding transaction to current thread...
DEBUG 2021-03-08 11:26:20,070 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.connection.session.JmsSessionManager: Tx to bind: session: 'org.mule.jms.commons.internal.source.push.JmsListenerSession@65ebdf22'
DEBUG 2021-03-08 11:26:20,077 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.message.JmsResultFactory: Creating Result: specification:[1.1],encoding:[UTF-8]
DEBUG 2021-03-08 11:26:20,077 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.message.JmsResultFactory: Message type received is: ActiveMQTextMessage
INFO 2021-03-08 11:26:20,199 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/1; event: ] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: "Message received"
DEBUG 2021-03-08 11:26:20,220 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/2/processors/1; event: ] com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool: Testing PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@6ed418b2] on CHECKOUT.
DEBUG 2021-03-08 11:26:20,287 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/2/processors/1; event: ] com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool: Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@6ed418b2] on CHECKOUT has SUCCEEDED.
INFO 2021-03-08 11:26:20,505 [ActiveMQ Session Task-1] [processor: queue1Flow1/processors/3; event: ] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: "And we are done!"
DEBUG 2021-03-08 11:26:20,522 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: Waiting for message to be processed through flow
DEBUG 2021-03-08 11:26:20,522 [ActiveMQ Session Task-1] [processor: ; event: ] org.mule.jms.commons.internal.source.push.JmsMessageListener: Resuming message consuming
运行时
* Mule Runtime and Integration Platform *
* Version: 4.3.0-20210119 Build: 08e1da0d *
* MuleSoft,Inc. *
* For more information go to *
* https://www.mulesoft.com/platform/soa/mule-esb-enterprise *
* *
* Server started: 3/9/21 5:31 PM *
* JDK: 1.8.0_232 (mixed mode) *
* JDK properties: *
* - java.vendor = AdoptOpenJDK *
* - java.vm.name = OpenJDK 64-Bit Server VM *
* - java.home = *
* C:\AnypointStudio\plugins\org.mule.tooling.jdk.win32.x86_64_1.0.0. *
* 202004281356\jre *
* OS: Windows 10 - (10.0,amd64) *
* Host: LX334321 (180.123.44.126) *
* Mule services: *
* - api-gateway-contract-service-1.1.0 *
* - api-gateway-events-collector-service-1.1.0 *
* - mule-service-http-ee-1.6.8 *
* - mule-service-oauth-ee-1.0.0 *
* - mule-service-scheduler-1.3.2 *
* - mule-service-soap-1.3.0 *
* - mule-service-weave-ee-2.3.0-20210119 *
* Mule server plugins: *
* - mule-agent-plugin *
* - mule-debugger-5.0.4-mule-server-plugin *
* - munit-recording-server-mule-server-plugin *
* Applied artifact patches: *
* - apikit-2576-1.3.7-1.3.9-2.0.jar *
* - apikit-2612-1.0.0-1.0.2-1.1.0-1.0.jar *
* - apikit-2612-1.1.1-1.0.jar *
* - apikit-2612-1.1.11-1.0.jar *
* - apikit-2612-1.1.12-1.2.0-1.2.2-1.0.jar *
* - apikit-2612-1.1.13-1.1.14-1.2.3-1.2.4-1.0.jar *
* - apikit-2612-1.1.15-1.1.16-1.0.jar *
* - apikit-2612-1.1.2-1.0.jar *
* - apikit-2612-1.1.3-1.0.jar *
* - apikit-2612-1.1.4-1.0.jar *
* - apikit-2612-1.1.5-1.1.6-1.0.jar *
* - apikit-2612-1.1.7-1.0.jar *
* - apikit-2612-1.1.8-1.1.10-1.0.jar *
* - apikit-2612-1.2.5-1.3.1-1.3.4-1.0.jar *
* - apikit-2612-1.3.0-1.0.jar *
* - apikit-2612-1.3.5-1.3.9-1.0.jar *
* - apikit-2613-1.2.0-1.2.1-1.0.jar *
* - apikit-2613-1.2.2-1.0.jar *
* - apikit-2613-1.2.3-1.2.4-1.3.0-1.0.jar *
* - apikit-2613-1.2.5-1.3.1-1.3.4-1.0.jar *
* - apikit-2613-1.3.5-1.3.6-1.0.jar *
* - apikit-2613-1.3.7-1.3.8-1.0.jar *
* - apikit-2613-1.3.9-1.0.jar *
* - MULE-17706-1.1.1-1.1.2-1.0.jar *
* - MULE-17706-1.2.0-1.0.jar *
* - MULE-17706-1.2.1-1.2.2-1.0.jar *
* - MULE-17706-1.2.3-1.0.jar *
* - MULE-17706-1.3.0-1.3.1-1.0.jar *
* - MULE-17706-1.3.2-1.3.3-1.0.jar *
* - MULE-17706-1.3.4-1.0.jar *
* - MULE-17706-1.4.0-1.0.jar *
* - MULE-17706-1.4.1-1.4.3-1.0.jar *
* - MULE-17706-1.5.0-1.5.6-1.0.jar *
* - MULE-17706-1.5.10-1.5.11-1.0.jar *
* - MULE-17706-1.5.7-1.5.9-1.0.jar *
* - MULE-18457-1.1.1-1.0.jar *
* - MULE-18457-1.2.0-1.2.1-1.0.jar *
* - MULE-18457-1.3.0-1.0.jar *
* - MULE-18457-1.3.1-1.0.jar *
* - MULE-18457-1.3.2-1.0.jar *
* - MULE-18457-1.3.3-1.0.jar *
* - MULE-18900-1.4.0-1.0.jar *
* - SE-12551-1.0.0-1.0.1-1.0.jar *
* - SE-12551-1.1.0-1.1.15-2.0.jar *
* - SE-12551-1.2.0-1.3.0-1.0.jar *
* - SE-12551-1.3.1-1.3.4-1.0.jar *
* - SE-12562-1.0.0-1.5.5-1.0.jar *
* - SE-17198-1.0.jar *
* Mule system properties: *
* - mule.Metadata.cache.expirationInterval.millis = 5000 *
* - mule.testingMode = *
* - mule.base = *
* C:\AnypointStudio\plugins\org.mule.tooling.server.4.3.0.ee_7.3.5.2 *
* 02102051607\mule *
* - mule.home = *
* C:\AnypointStudio\plugins\org.mule.tooling.server.4.3.0.ee_7.3.5.2 *
* 02102051607\mule *
* - mule.forceConsoleLog = *
* - mule.Metadata.cache.entryTtl.minutes = 10 *
**********************************************************************
库和连接器
**********************************************************************
* Started app 'project1' *
* Application plugins: *
* - Database : 1.9.1 *
* - IBM MQ : 1.6.4 *
* - JMS : 1.7.3 *
* - Sockets : 1.1.5 *
* - Spring : 1.3.5 *
* - XML : 1.3.0 *
* - HTTP : 1.5.21 *
* Application libraries: *
* - ojdbc8-19.3.0.0.jar *
* - ucp-19.3.0.0.jar *
* - oraclepki-19.3.0.0.jar *
* - osdt_cert-19.3.0.0.jar *
* - osdt_core-19.3.0.0.jar *
* - simplefan-19.3.0.0.jar *
* - ons-19.3.0.0.jar *
* - com.ibm.mq.allclient-9.1.4.0.jar *
* - bcprov-jdk15on-1.64.jar *
* - bcpkix-jdk15on-1.64.jar *
* - javax.jms-api-2.0.1.jar *
* - activemq-client-5.15.4.jar *
* - slf4j-api-1.7.25.jar *
* - geronimo-jms_1.1_spec-1.1.1.jar *
* - hawtbuf-1.11.jar *
* - geronimo-j2ee-management_1.1_spec-1.0.1.jar *
* - spring-beans-5.1.6.RELEASE.jar *
* - spring-security-config-5.1.5.RELEASE.jar *
* - spring-aop-5.1.6.RELEASE.jar *
* - spring-context-5.1.6.RELEASE.jar *
* - spring-expression-5.1.6.RELEASE.jar *
* - spring-security-core-5.1.5.RELEASE.jar *
* - spring-core-5.1.6.RELEASE.jar *
* - spring-jcl-5.1.6.RELEASE.jar *
**********************************************************************
Anypoint Studio
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)