1

我想为后端休息服务做一个代理,但在我将请求转发到后端之前,我需要做一些检查。我查看了文档,有一个http-proxy可以用来做代理,但是当我放入流程时,有异常。如果我使用 http:outbound-endpoint,则该方法不能是动态 MEL 表达式(其余方法可以是 POST、GET、PUT、DELTE 等)。

你能给我一个建议吗?一个例子会更好,非常感谢。我的配置:

<flow name="demo.routerFlow1" doc:name="demo.routerFlow1">
  <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8080" doc:name="HTTP" />
  <logger
    message="Method: #[message.inboundProperties['http.method']], URI: #[message.inboundProperties['http.request.path']], Params: #[message.inboundProperties['http.query.params']]"
    level="INFO" doc:name="Logger" />
  <http:body-to-parameter-map-transformer doc:name="Body to Parameter Map" />
  <choice doc:name="Choice">
    <when expression="(payload['timestamp'] == null || payload['nonce'] == null)">
      <expression-component doc:name="Check Required Params"><![CDATA[payload="{\"code\":\"PA001\", \"message\":\"missing required parameter timestamp and nonce\"}"]]>
      </expression-component>
    </when>
    <otherwise>
      <choice doc:name="Choice">
        <when expression="!replayAttackCheck.validate(payload)" evaluator="groovy">
          <expression-component doc:name="Check Required Params"><![CDATA[payload="{\"code\":\"PA002\", \"message\":\"timestamp or nonce is illegal\"}"]]>
          </expression-component>
        </when>
        <otherwise>
          <processor-chain doc:name="Processor Chain">
            <pattern:http-proxy name="http-proxy-sample"> <!--line 38-->
              <http:inbound-endpoint address="http://localhost:8080/"></http:inbound-endpoint>
              <http:outbound-endpoint address="http://localhost:8081/"></http:outbound-endpoint>
            </pattern:http-proxy>
          </processor-chain>
        </otherwise>
      </choice>
    </otherwise>
  </choice>
</flow>

错误:

Caused by: org.xml.sax.SAXParseException; lineNumber: 38; columnNumber: 31; cvc-complex-type.2.4.b: The content of element 'processor-chain' is not complete. One of '{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/core":description, "http://www.mulesoft.org/schema/mule/core":abstract-message-processor, "http://www.mulesoft.org/schema/mule/core":abstract-outbound-endpoint, "http://www.mulesoft.org/schema/mule/core":abstract-mixed-content-message-processor}' is expected.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
4

2 回答 2

1

你只需要一个 http:outbound 到你的 else 块中的实际休息服务。

尝试使用以下内容。

<otherwise>
          <http:outbound-endpoint address="http://localhost:8081/"></http:outbound-endpoint>
</otherwise>

希望这可以帮助。

于 2013-08-09T12:08:06.260 回答
1

配置模式是独立的,独立于任何流程,不能在一个流程中进行配置。它们是常见场景的预定义集成模式。流程用于滚动您自己的流程。见这里: http: //www.mulesoft.org/documentation/display/current/Choosing+Between+Flows+and+Patterns

作为旁注:您已经在 localhost:8080 上收听,所以我认为您只需要一个 http:outbound-endpoint 来连接您在 8081 上运行的服务

<http:outbound-endpoint address="http://localhost:8081/" />
于 2013-08-09T11:43:38.950 回答