如何使用请求路径在 Mule ESB 中进行路由
How to route in Mule ESB using request path
您好,我正在尝试在流程中添加路由器,以便我可以重新使用我的代码并避免重复。
我通常为每个请求路径做一个流程,例如:
HTTP 侦听器 = localhost:8080/mule1
HTTP 侦听器 = localhost:8080/mule2
我想知道是否可以使用请求路径通过 Router/Choice 连接器进行路由。我无法这样做,因为它告诉我只有 /
的侦听器
这是我的代码:
<flow name="Tickets">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<logger message="#[message.inboundProperties.'http.listener.path']" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="#[message.inboundProperties.'http.request.path' == "/getTicketByTicketCode"]">
<set-payload value="#[message.inboundProperties.'http.query.params'.ticketcode]" doc:name="Set Payload"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "UTF-8")
xml.GetTicketByCode(xmlns: 'http://tempuri.org/') {
code(payload)
}
result = writer.toString() ]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="GetTicketByCode" doc:name="Web Service Consumer"/>
</when>
<when expression="#[message.inboundProperties.'http.request.path' == "/validateTickets"]">
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="ValidateTicket" doc:name="Web Service Consumer"/>
</when>
</choice>
<mulexml:xslt-transformer xsl-file="removeattributes.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/>
<json:xml-to-json-transformer doc:name="XML to JSON"/>
</flow>
INFO 2015-05-26 09:25:40,303 [[billeterie].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: No listener found for request: (GET)/getTicketByTicketCode
INFO 2015-05-26 09:25:40,303 [[billeterie].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: Available listeners are: [(*)/]
有没有办法让它工作?或者是唯一的方法是添加另一个 queryParam 就像路径一样。谢谢
您可以使用以下 path="/*"
,我已将您的流程修改如下:-
<flow name="Tickets">
<http:listener config-ref="HTTP_Listener_Configuration" path="/*" doc:name="HTTP"/>
<logger message="#[message.inboundProperties.'http.listener.path']" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="#[message.inboundProperties.'http.request.path'.contains('/getTicketByTicketCode')]">
<logger message="getTicketByTicketCode flow" level="INFO" doc:name="Logger"/>
<set-payload value="#[message.inboundProperties.'http.query.params'.ticketcode]" doc:name="Set Payload"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "UTF-8")
xml.GetTicketByCode(xmlns: 'http://tempuri.org/') {
code(payload)
}
result = writer.toString() ]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="GetTicketByCode" doc:name="Web Service Consumer"/>
</when>
<when expression="#[message.inboundProperties.'http.request.path'.contains('/validateTickets')]">
<logger message="validateTickets flow" level="INFO" doc:name="Logger"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="ValidateTicket" doc:name="Web Service Consumer"/>
</when>
<otherwise>
<logger message="Other than this url " level="INFO" doc:name="Logger"/>
</otherwise>
<mulexml:xslt-transformer xsl-file="removeattributes.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/>
<json:xml-to-json-transformer doc:name="XML to JSON"/>
</choice>
</flow>
现在如果你的 url 包含 getTicketByTicketCode 那么它将转到第一个流程,如果它包含 validateTickets 它将进入第二个流程....
否则,如果它没有这 2 个中的任何一个,它将在 otherwise 条件
中打印记录器
您好,我正在尝试在流程中添加路由器,以便我可以重新使用我的代码并避免重复。
我通常为每个请求路径做一个流程,例如:
HTTP 侦听器 = localhost:8080/mule1 HTTP 侦听器 = localhost:8080/mule2
我想知道是否可以使用请求路径通过 Router/Choice 连接器进行路由。我无法这样做,因为它告诉我只有 /
的侦听器这是我的代码:
<flow name="Tickets">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
<logger message="#[message.inboundProperties.'http.listener.path']" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="#[message.inboundProperties.'http.request.path' == "/getTicketByTicketCode"]">
<set-payload value="#[message.inboundProperties.'http.query.params'.ticketcode]" doc:name="Set Payload"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "UTF-8")
xml.GetTicketByCode(xmlns: 'http://tempuri.org/') {
code(payload)
}
result = writer.toString() ]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="GetTicketByCode" doc:name="Web Service Consumer"/>
</when>
<when expression="#[message.inboundProperties.'http.request.path' == "/validateTickets"]">
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="ValidateTicket" doc:name="Web Service Consumer"/>
</when>
</choice>
<mulexml:xslt-transformer xsl-file="removeattributes.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/>
<json:xml-to-json-transformer doc:name="XML to JSON"/>
</flow>
INFO 2015-05-26 09:25:40,303 [[billeterie].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: No listener found for request: (GET)/getTicketByTicketCode
INFO 2015-05-26 09:25:40,303 [[billeterie].HTTP_Listener_Configuration.worker.01] org.mule.module.http.internal.listener.HttpListenerRegistry: Available listeners are: [(*)/]
有没有办法让它工作?或者是唯一的方法是添加另一个 queryParam 就像路径一样。谢谢
您可以使用以下 path="/*"
,我已将您的流程修改如下:-
<flow name="Tickets">
<http:listener config-ref="HTTP_Listener_Configuration" path="/*" doc:name="HTTP"/>
<logger message="#[message.inboundProperties.'http.listener.path']" level="INFO" doc:name="Logger"/>
<choice doc:name="Choice">
<when expression="#[message.inboundProperties.'http.request.path'.contains('/getTicketByTicketCode')]">
<logger message="getTicketByTicketCode flow" level="INFO" doc:name="Logger"/>
<set-payload value="#[message.inboundProperties.'http.query.params'.ticketcode]" doc:name="Set Payload"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "UTF-8")
xml.GetTicketByCode(xmlns: 'http://tempuri.org/') {
code(payload)
}
result = writer.toString() ]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="GetTicketByCode" doc:name="Web Service Consumer"/>
</when>
<when expression="#[message.inboundProperties.'http.request.path'.contains('/validateTickets')]">
<logger message="validateTickets flow" level="INFO" doc:name="Logger"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[]]></scripting:script>
</scripting:component>
<ws:consumer config-ref="Web_Service_Consumer" operation="ValidateTicket" doc:name="Web Service Consumer"/>
</when>
<otherwise>
<logger message="Other than this url " level="INFO" doc:name="Logger"/>
</otherwise>
<mulexml:xslt-transformer xsl-file="removeattributes.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"/>
<json:xml-to-json-transformer doc:name="XML to JSON"/>
</choice>
</flow>
现在如果你的 url 包含 getTicketByTicketCode 那么它将转到第一个流程,如果它包含 validateTickets 它将进入第二个流程....
否则,如果它没有这 2 个中的任何一个,它将在 otherwise 条件
中打印记录器