过去几个小时我一直试图让自己成功地工作,但是在遵循这里的模型之后无济于事:“http://blogs.mulesoft.org/meet-until-successful-store-and-forward-for-mule/”。直到成功使用的主要流程是 SEND_TO_POST_SERVICE 。我希望在成功之前继续运行引用的流程,直到最大重试次数。以下是我的流程和相关信息。内部Mule服务器版本为3.4,Mule Studio版本为3.4.0
################## 流<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:json="http://www.mulesoft.org/schema/mule/json"
xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:data-mapper="http://www.mulesoft.org/schema/mule/ee/data-mapper"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:core="http://www.mulesoft.org/schema/mule/core"
version="EE-3.4.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd
http://www.mulesoft.org/schema/mule/ee/data-mapper http://www.mulesoft.org/schema/mule/ee/data-mapper/current/mule-data-mapper.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<choice-exception-strategy name="Post_Exception_Strategy">
<catch-exception-strategy when="exception.causedBy(java.net.SocketTimeoutException) or exception.causedBy(java.net.ConnectException)" doc:name="Catch Exception Strategy">
<logger message="Network exception occurred" level="INFO" doc:name="Logger"/>
</catch-exception-strategy>
<catch-exception-strategy when="exception.causedBy(java.lang.Throwable)" doc:name="Catch Exception Strategy">
<logger message="General exception occurred" level="INFO" doc:name="Logger"/>
</catch-exception-strategy>
</choice-exception-strategy>
<flow name="compositeFlow1"
doc:name="compositeFlow1">
<composite-source doc:name="Comp Source">
<inbound-endpoint doc:name="DTCOM"
ref="SUBMISSION_REQUEST_EP"/>
</composite-source>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<flow-ref name="POST_TO_SERVICES"
doc:name="POST_TO_SERVICES_ref"/>
<exception-strategy ref="Post_Exception_Strategy"
doc:name="Reference Exception Strategy"/>
</flow>
<flow name="POST_TO_SERVICES" doc:name="POST_TO_SERVICES" processingStrategy="synchronous">
<!-- Send to the POST Service -->
<async>
<flow-ref name="SEND_TO_POST_SERVICE" doc:name="SEND_TO_POST_SERVICE_ref"/>
</async>
<outbound-endpoint ref="HTTP_EP_1" doc:name="HTTP_EP_1"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<set-variable variableName="statusCode" value="#[message.inboundProperties['http.status']]" doc:name="statusCode"/>
<json:object-to-json-transformer doc:name="Object to JSON"/>
<logger message="Data submitted to Endpoint HTTP_STATUS_CODE: #[statusCode]" level="INFO" doc:name="Logger"/>
<exception-strategy ref="Post_Exception_Strategy" doc:name="Reference Exception Strategy"/>
</flow>
<spring:beans>
<spring:bean id="myListableObjectStore" class="org.mule.util.store.SimpleMemoryObjectStore"/>
</spring:beans>
<flow name="SEND_TO_POST_SERVICE" doc:name="Send to POST Service">
<choice doc:name="Choice">
<when expression="${send_to_post} == 'true'">
<until-successful objectStore-ref="myListableObjectStore" maxRetries="3" secondsBetweenRetries="2" doc:name="Until_Success">
<flow-ref name="CONNECT_TO_POST_SERVICE" doc:name="CONNECT_TO_POST_SERVICE_ref"/>
</until-successful>
</when>
<otherwise>
<logger message="NOT Posting to SERVICE" level="DEBUG" doc:name="Send_Logger"/>
</otherwise>
</choice>
</flow>
<flow name="CONNECT_TO_POST_SERVICE" doc:name="CONNECT_TO_POST_SERVICE">
<logger message="$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$In Until-Successful for POST" level="INFO" doc:name="USLogger"/>
<processor-chain doc:name="Processor Chain">
<logger message="Sending JSON to POST Service" level="INFO" doc:name="JSON_POST_Logger"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<message-properties-transformer doc:name="Message Properties">
<add-message-property key="Content-Type" value="application/json"/>
</message-properties-transformer>
<outbound-endpoint ref="POST_SERVICE_EP" doc:name="POST_SERVICE" exchange-pattern="request-response"></outbound-endpoint>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="Status Code response from Sending POST JSON = #[message.inboundProperties['http.status']]" level="INFO" doc:name="StatusCodeLog"/>
<logger message="Message from POST Service for #[payload]" level="INFO" doc:name="LoggerMessageOutput"/>
</processor-chain>
</flow>
</mule>
################## Endpoints
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
xmlns:https="http://www.mulesoft.org/schema/mule/https"
xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.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/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
<http:endpoint name="POST_SERVICE_EP" exchange-pattern="request-response" address="http://127.0.0.1:8900/post/service/" connector-ref="http_connector" contentType="application/json" doc:name="HTTP"/>
<http:endpoint name="HTTP_EP_1" method="PUT" contentType="application/json" connector-ref="http_connector_2" address="http://127.0.0.1:8900/put/service/" doc:name="HTTP"/>
</mule>
##################连接器
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:https="http://www.mulesoft.org/schema/mule/https"
xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core" version="EE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
<http:connector name="http_connector" clientSoTimeout="1000000" serverSoTimeout="1000000" doc:name="http_connector" keepAlive="true">
<receiver-threading-profile maxThreadsActive="10" doThreading="true" threadWaitTimeout="-1" maxBufferSize="10000" maxThreadsIdle="5" poolExhaustedAction="WAIT"/>
<dispatcher-threading-profile maxThreadsActive="10" doThreading="true" threadWaitTimeout="-1" maxBufferSize="10000" maxThreadsIdle="5" poolExhaustedAction="WAIT"/>
</http:connector>
<http:connector name="http_connector_2" doc:name="http_connector" keepAlive="true">
<receiver-threading-profile maxThreadsActive="10" doThreading="true" threadWaitTimeout="-1" maxBufferSize="10000" maxThreadsIdle="5" poolExhaustedAction="WAIT"/>
<dispatcher-threading-profile maxThreadsActive="10" doThreading="true" threadWaitTimeout="-1" maxBufferSize="10000" maxThreadsIdle="5" poolExhaustedAction="WAIT"/>
</http:connector>
</mule>
答案 0 :(得分:2)
您flow-ref
的流量(即CONNECT_TO_POST_SERVICE
)是私有流而非子流。
这意味着抛出的异常不会传播给调用者。将其更改为sub-flow
,它应该可以正常工作。
PS。同时删除processor-chain
中的CONNECT_TO_POST_SERVICE
:它完全没用。