我有一个REST服务,它返回一个简单的json {message:“ok”}。当我使用Respond Mediator时,停止进一步处理消息并将消息发送回客户端。
我需要向客户端发送响应,然后异步执行任务,但是如果我使用它,则忽略对序列或端点的下一次调用。
如何同步响应(响应客户端)然后调用服务,而没有响应中介忽略下一个中介?
感谢;
答案 0 :(得分:2)
我能够解决这个挑战。有效地克隆调解器不仅仅是克隆消息,它为新消息赋予了新的独立生命。
<api xmlns="http://ws.apache.org/ns/synapse" name="porticApiAsyn" context="/test">
<resource methods="POST" url-mapping="/asyn">
<inSequence>
<log>
<property name="message" value="asyn"/>
</log>
<payloadFactory media-type="json">
<format>{"message":"asyn test"}</format>
<args/>
</payloadFactory>
<clone continueParent="true" sequential="true">
<target sequence="logSequence"/>
</clone>
<respond/>
</inSequence>
在这种情况下,将消息发送到logsequence,然后执行响应中介。谢谢你的帮助。
答案 1 :(得分:0)
对于您的情况,您甚至可以执行以下操作
<api xmlns="http://ws.apache.org/ns/synapse" name="porticApiAsyn" context="/test">
<resource methods="POST" url-mapping="/asyn">
<inSequence>
<log>
<property name="message" value="asyn"/>
</log>
<payloadFactory media-type="json">
<format>{"message":"asyn test"}</format>
<args/>
</payloadFactory>
<clone continueParent="true" sequential="true">
<target sequence="logSequence"/>
<target>
<sequence>
<respond/>
</sequence>
</target>
</clone>
</inSequence>
我想它应该也可以运作,可能更具可读性