如何通过ESB(WSO2)通信两个Web服务?

时间:2016-04-22 11:16:32

标签: wso2 wso2esb esb

我希望在我的案例WSo2中通过ESB来管理两个Web服务,因为我必须设置端点和代理服务,但我无法解决它。

任何想法?,任何教程?

1 个答案:

答案 0 :(得分:2)

首先,您应该在ESB中的代理服务和API之间进行选择。代理服务将为您提供SOAP端点,API将为您提供RESTful端点。

但是你选择了哪一个,其余的都是一样的。当您调用代理服务或API时,将会触发一个inSequence。在你的inSequence中,你必须混合和匹配一组调解员,并根据你的需要量身定制。中介是整合流程中的一个工作单元。

例如,服务链场景可能类似于:

  1. 您接收传入消息,从中获取一些值,使用PayloadFactory介体创建新的有效负载。
  2. 使用Call mediator调用您的第一个后端。
  3. 然后您从此处获取响应并使用PaylaodFactory介体再次创建新的有效负载。
  4. 您再次使用呼叫中介呼叫您的第二个后端。
  5. 最后,您使用Respond介体回复您的客户。
  6. 看看下面的inSequence执行上述步骤。您可以将其放入代理或API中。

    <inSequence>
        <log level="custom">
            <property name="Lets log the incoming payload" expression="$body"/> 
        </log>
    
        <!-- Payload for first backend -->
        <payloadFactory media-type="json">
          <format>
             "payload":{
                "name":"StackOverflow",
                "value":"SO"
              }
          </format>   
        </payloadFactory>
    
        <!-- Invoke backend 1 -->
        <call>
          <endpoint>
              <http uri="http://backend1/jsonEndpoint" method="post"/>
          </endpoint>
        </call>
    
       <!-- At this point we have the response from backend1 in the message context -->
        <log level="custom">
            <property name="Lets log the payload from backend1" expression="$body"/> 
        </log>
    
        <!-- Payload for second backend. We are using JSONPath to access a value from backend1's payload here -->
        <payloadFactory media-type="json">
          <format>
             "payload":{
                "name":"StackOverflow",
                "value":"SO",
                "id": $1
              }
          </format>   
          <args>
             <arg expression="$.response.from.backend1.id"/>
          </args>
        </payloadFactory>
    
        <!-- Invoke backend 2 -->
        <call>
          <endpoint>
              <http uri="http://backend2/endpoint" method="post"/>
          </endpoint>
        </call>
    
       <!-- At this point we have the response from backend2 in the message context -->
        <log level="custom">
            <property name="Lets log the payload from backend2" expression="$body"/> 
        </log>
    
       <!-- Respond back to client -->
       <respond/>
    </inSequence>
    

    我没有测试过上面的序列,但它应该相当准确。为了帮助您入门,以下是我们上面使用的所有文档。