2

我有一个 REST 服务,它返回一个简单的 json {消息:“ok”}。当我使用 Respond Mediator 时,这会停止进一步处理消息并将消息发送回客户端。

我需要向客户端发送响应,然后异步执行任务,但如果我使用它会忽略对序列或端点的下一次调用。

您如何同步响应(响应客户端)然后调用服务,而没有响应中介者忽略下一个中介者?

谢谢;

4

2 回答 2

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,然后执行响应中介。谢谢你的帮助。

于 2017-11-02T17:24:20.400 回答
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>

我想它应该也可以工作,并且可能更具可读性

于 2017-11-06T08:33:40.487 回答