我有一个简单的流程,不适用于骡子。在我的设置中,我正在一个端口上侦听HTTP流量并在另一个端口上转发流量,我认为这是最典型的ESB用例。除目标应用程序发出重定向外,代理/网关流程才有效。有谁知道解决这个问题的任何技巧?请注意,我不能使用mule的“HTTP-Proxy模式”,因为我打算为更复杂的用例扩展此流程。
骡流
INFO 2015-10-01 13:01:48,333 [[test2].APP_A_IN.worker.01] org.mule.api.processor.LoggerMessageProcessor:
org.mule.DefaultMuleMessage
{
Message properties:
INVOCATION scoped properties:
INBOUND scoped properties:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding=gzip, deflate, sdch
accept-language=en-US,en;q=0.8
cache-control=max-age=0
connection=keep-alive
dnt=1
host=localhost:12344
http.listener.path=/*
http.method=GET
http.query.params=ParameterMap{[]}
http.query.string=
http.relative.path=/app_a
http.remote.address=/127.0.0.1:53372
http.request.path=/app_a
http.request.uri=/app_a
http.scheme=http
http.uri.params=ParameterMap{[]}
http.version=HTTP/1.1
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
x-firephp-version=0.0.6
OUTBOUND scoped properties:
SESSION scoped properties:
}
案例1:followRedirects = true(默认)
在这种情况下,mule从目标端点获取HTTP 302,并在内部导航到重定向页面并将页面提供给客户端。如果我使用Mule作为某些Web服务的网关,那就太棒了。但是,对于来自浏览器的HTTP流量,如果我们允许这种情况发生,则所有相对URL都将从呈现的页面中断。
案例2:followRedirects = false
在这种情况下,mule从目标端点获取HTTP 302,并在记录后丢弃响应。 Mule只需在浏览器上发送带有空HTML页面的HTTP 200。请参阅下面的案例2.我喜欢将HTTP 302响应发送给最终用户。
请求记录(案例2)
INFO 2015-10-01 13:01:48,420 [[test2].APP_A_IN.worker.01] org.mule.api.processor.LoggerMessageProcessor:
org.mule.DefaultMuleMessage
{
Message properties:
INVOCATION scoped properties:
INBOUND scoped properties:
date=Thu, 01 Oct 2015 17:01:48 GMT
http.reason=Moved Temporarily
http.status=302
location=http://localhost:8380/app_a/
server=Apache-Coyote/1.1
transfer-encoding=chunked
OUTBOUND scoped properties:
SESSION scoped properties:
}
已记录响应(案例2)
999999
答案 0 :(得分:0)
我认为问题在于您没有将请求者的属性复制到侦听器的响应中。我建议在请求者后面使用copy-properties
元素。否则入站属性将丢失:您需要它们作为出站点。
但是,http.status等某些属性可能需要使用response-builder
显式映射到标头。
HTH