2016-05-25 1 views
1

Когда я запускаю DSL-код интеграции пружины ниже, я вижу неожиданное поведение, когда «поток2» появляется для обоих путей IntegrationFlow. Легко дублировать. Запустив код ниже, просто используйте простую команду curl для двух точек входа, чтобы продемонстрировать.Весна-интеграция DSL - такое поведение кажется неправильным?

$ локон локальный: 8080/Foo

принимает путь: httpGate() -> requestChannel() -> поток()

но неожиданно 'FLOW2' печатается на стандартный вывод

$ локон локальный: 8080/бар

занимает путь: httpGate2() -> requestChannel2() -> FLOW2()

, как Ожидается, что «flow2» печатается в стандартный вывод.

Это подтверждается просмотром вывода отладки SI preSend и postSend ниже.

 
Looking up handler method for path /foo 
preSend on channel 'requestChannel' 
preSend on channel 'flow.channel#0 
preSend on channel 'flow2.channel#1  !!!! 'flow2' unexpected !!! 

Looking up handler method for path /bar 
preSend on channel'requestChannel2' 
preSend on channel 'flow2.channel#0' 
preSend on channel 'flow2.channel#1 

Что мне не хватает или не понимаю? :: Весна :: Загрузочный (v1.3.5.RELEASE)

2016-05-25 10:52:58.840 INFO 2478 --- [   main] com.example.SpringIntegrationIssue  : Starting SpringIntegrationIssue on dfwloxmm64dfd57.local with PID 2478 (/Users/grk/dev/git/si-dsl-issue/build/classes/main started by grk in /Users/grk/dev/git/si-dsl-issue) 
2016-05-25 10:52:58.842 INFO 2478 --- [   main] com.example.SpringIntegrationIssue  : No active profile set, falling back to default profiles: default 
2016-05-25 10:52:58.995 INFO 2478 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]525b461a: startup date [Wed May 25 10:52:58 PDT 2016]; root of context hierarchy 
2016-05-25 10:52:59.694 INFO 2478 --- [   main] o.s.b.f.config.PropertiesFactoryBean  : Loading properties file from URL [jar:file:/Users/grk/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.5.RELEASE/2e9624d73abb5a8acee3e71b3bb637bc913b37b8/spring-integration-core-4.2.5.RELEASE.jar!/META-INF/spring.integration.default.properties] 
2016-05-25 10:52:59.696 INFO 2478 --- [   main] o.s.i.config.IntegrationRegistrar  : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created. 
2016-05-25 10:52:59.697 DEBUG 2478 --- [   main] o.s.i.config.IntegrationRegistrar  : The '#jsonPath' SpEL function cannot be registered: there is no jayway json-path.jar on the classpath. 
2016-05-25 10:52:59.697 DEBUG 2478 --- [   main] o.s.i.config.IntegrationRegistrar  : SpEL function '#xpath' isn't registered: there is no spring-integration-xml.jar on the classpath. 
2016-05-25 10:52:59.836 INFO 2478 --- [   main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created. 
2016-05-25 10:52:59.838 INFO 2478 --- [   main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created. 
2016-05-25 10:53:00.236 INFO 2478 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 
2016-05-25 10:53:00.246 INFO 2478 --- [   main] o.apache.catalina.core.StandardService : Starting service Tomcat 
2016-05-25 10:53:00.247 INFO 2478 --- [   main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.33 
2016-05-25 10:53:00.321 INFO 2478 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext 
2016-05-25 10:53:00.321 INFO 2478 --- [ost-startStop-1] o.s.web.context.ContextLoader   : Root WebApplicationContext: initialization completed in 1334 ms 
2016-05-25 10:53:00.510 INFO 2478 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 
2016-05-25 10:53:00.513 INFO 2478 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 
2016-05-25 10:53:00.514 INFO 2478 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 
2016-05-25 10:53:00.514 INFO 2478 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 
2016-05-25 10:53:00.514 INFO 2478 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 
2016-05-25 10:53:00.573 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : 'Jaxb2RootElementHttpMessageConverter' was added to the 'defaultMessageConverters'. 
2016-05-25 10:53:00.575 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : 'MappingJackson2HttpMessageConverter' was added to the 'defaultMessageConverters'. 
2016-05-25 10:53:00.589 INFO 2478 --- [   main] o.s.b.f.config.PropertiesFactoryBean  : Loading properties file from URL [jar:file:/Users/grk/.gradle/caches/modules-2/files-2.1/org.springframework.integration/spring-integration-core/4.2.5.RELEASE/2e9624d73abb5a8acee3e71b3bb637bc913b37b8/spring-integration-core-4.2.5.RELEASE.jar!/META-INF/spring.integration.default.properties] 
2016-05-25 10:53:00.606 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : Using MultipartResolver [org.springf[email protected]48f5bde6] 
2016-05-25 10:53:00.606 WARN 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : The 'requestPayloadType' attribute will have no relevance for one of the specified HTTP methods '[GET, HEAD, OPTIONS]' 
2016-05-25 10:53:00.609 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : 'Jaxb2RootElementHttpMessageConverter' was added to the 'defaultMessageConverters'. 
2016-05-25 10:53:00.610 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : 'MappingJackson2HttpMessageConverter' was added to the 'defaultMessageConverters'. 
2016-05-25 10:53:00.611 DEBUG 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : Using MultipartResolver [org.springf[email protected]48f5bde6] 
2016-05-25 10:53:00.612 WARN 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : The 'requestPayloadType' attribute will have no relevance for one of the specified HTTP methods '[GET, HEAD, OPTIONS]' 
2016-05-25 10:53:01.037 INFO 2478 --- [   main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot[email protected]525b461a: startup date [Wed May 25 10:52:58 PDT 2016]; root of context hierarchy 
2016-05-25 10:53:01.084 INFO 2478 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 
2016-05-25 10:53:01.085 INFO 2478 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 
2016-05-25 10:53:01.103 INFO 2478 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2016-05-25 10:53:01.103 INFO 2478 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2016-05-25 10:53:01.127 INFO 2478 --- [   main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
2016-05-25 10:53:01.196 INFO 2478 --- [   main] o.s.s.c.ThreadPoolTaskScheduler   : Initializing ExecutorService 'taskScheduler' 
2016-05-25 10:53:01.262 INFO 2478 --- [   main] o.s.j.e.a.AnnotationMBeanExporter  : Registering beans for JMX exposure on startup 
2016-05-25 10:53:01.266 DEBUG 2478 --- [   main] .s.i.c.GlobalChannelInterceptorProcessor : No global channel interceptors. 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : started httpGate2 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] .h.i.HttpRequestHandlingMessagingGateway : started httpGate 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 1 subscriber(s). 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started _org.springframework.integration.errorLogger 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {object-to-string-transformer} as a subscriber to the 'requestChannel' channel 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.requestChannel' has 1 subscriber(s). 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#0 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {http:outbound-gateway} as a subscriber to the 'flow.channel#0' channel 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.flow.channel#0' has 1 subscriber(s). 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#1 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.flow.channel#1' has 1 subscriber(s). 
2016-05-25 10:53:01.269 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#2 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {object-to-string-transformer} as a subscriber to the 'requestChannel2' channel 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.requestChannel2' has 1 subscriber(s). 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#3 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : Adding {http:outbound-gateway} as a subscriber to the 'flow2.channel#0' channel 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.flow2.channel#0' has 1 subscriber(s). 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#4 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.integration.channel.DirectChannel : Channel 'application.flow2.channel#1' has 1 subscriber(s). 
2016-05-25 10:53:01.270 INFO 2478 --- [   main] o.s.i.endpoint.EventDrivenConsumer  : started org.springframework.integration.config.ConsumerEndpointFactoryBean#5 
2016-05-25 10:53:01.271 DEBUG 2478 --- [   main] .IntegrationRequestMappingHandlerMapping : Looking for request mappings in application context: org.springframework.boot[email protected]525b461a: startup date [Wed May 25 10:52:58 PDT 2016]; root of context hierarchy 
2016-05-25 10:53:01.272 INFO 2478 --- [   main] .IntegrationRequestMappingHandlerMapping : Mapped "{[/bar],methods=[GET]}" onto public abstract void org.springframework.web.HttpRequestHandler.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException 
2016-05-25 10:53:01.272 INFO 2478 --- [   main] .IntegrationRequestMappingHandlerMapping : Mapped "{[/foo],methods=[GET]}" onto public abstract void org.springframework.web.HttpRequestHandler.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException 
2016-05-25 10:53:01.333 INFO 2478 --- [   main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 
2016-05-25 10:53:01.336 INFO 2478 --- [   main] com.example.SpringIntegrationIssue  : Started SpringIntegrationIssue in 2.791 seconds (JVM running for 3.168) 
2016-05-25 10:53:04.322 INFO 2478 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring FrameworkServlet 'dispatcherServlet' 
2016-05-25 10:53:04.322 INFO 2478 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2016-05-25 10:53:04.332 INFO 2478 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 10 ms 
2016-05-25 10:53:04.346 DEBUG 2478 --- [nio-8080-exec-1] .IntegrationRequestMappingHandlerMapping : Looking up handler method for path /bar 
2016-05-25 10:53:04.347 DEBUG 2478 --- [nio-8080-exec-1] .IntegrationRequestMappingHandlerMapping : Returning handler method [public abstract void org.springframework.web.HttpRequestHandler.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException] 
2016-05-25 10:53:04.356 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : preSend on channel 'requestChannel2', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=ce44ad18-4202-a6a6-0870-fc38b87dc8af, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:04.356 DEBUG 2478 --- [nio-8080-exec-1] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.transformer.MessageTransformingHandler#1 received message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=ce44ad18-4202-a6a6-0870-fc38b87dc8af, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:04.356 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : preSend on channel 'flow2.channel#0', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=e6fc73c1-7872-0c79-bf04-8b8f9c06350d, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:04.357 DEBUG 2478 --- [nio-8080-exec-1] i.h.o.HttpRequestExecutingMessageHandler : consumerPostbackGate received message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=e6fc73c1-7872-0c79-bf04-8b8f9c06350d, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:04.461 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : preSend on channel 'flow2.channel#1', message: GenericMessage [payload=<200 OK,{Date=[Wed, 25 May 2016 17:53:04 GMT], Expires=[-1], Cache-Control=[private, max-age=0], Content-Type=[text/html; charset=ISO-8859-1], P3P=[CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."], Content-Encoding=[gzip], Server=[gws], Content-Length=[4452], X-XSS-Protection=[1; mode=block], X-Frame-Options=[SAMEORIGIN], Set-Cookie=[NID=79=TunItaDTDDyn5gEJxdcCFjC_KmtrIT-VlJ_woRkWuVYNpuKC49nbBQhjE_mwzDfiQvPttiUYTuOg2qBtlAc0PtSu_Qjg8-91ETGwUzoFxq34Bs1e7A7KcXz7WLnl_9GjY1xBl8gJDcdrJQ; expires=Thu, 24-Nov-2016 17:53:04 GMT; path=/; domain=.google.com; HttpOnly]}>, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=e980cc2c-4617-6231-fd69-c0f798483312, http_statusCode=200, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784461}] 
flow2 
2016-05-25 10:53:04.461 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'flow2.channel#1', message: GenericMessage [payload=<200 OK,{Date=[Wed, 25 May 2016 17:53:04 GMT], Expires=[-1], Cache-Control=[private, max-age=0], Content-Type=[text/html; charset=ISO-8859-1], P3P=[CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."], Content-Encoding=[gzip], Server=[gws], Content-Length=[4452], X-XSS-Protection=[1; mode=block], X-Frame-Options=[SAMEORIGIN], Set-Cookie=[NID=79=TunItaDTDDyn5gEJxdcCFjC_KmtrIT-VlJ_woRkWuVYNpuKC49nbBQhjE_mwzDfiQvPttiUYTuOg2qBtlAc0PtSu_Qjg8-91ETGwUzoFxq34Bs1e7A7KcXz7WLnl_9GjY1xBl8gJDcdrJQ; expires=Thu, 24-Nov-2016 17:53:04 GMT; path=/; domain=.google.com; HttpOnly]}>, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=e980cc2c-4617-6231-fd69-c0f798483312, http_statusCode=200, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784461}] 
2016-05-25 10:53:04.461 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'flow2.channel#0', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=e6fc73c1-7872-0c79-bf04-8b8f9c06350d, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:04.461 DEBUG 2478 --- [nio-8080-exec-1] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'requestChannel2', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]786f1d94, errorChannel=org.springframewor[email protected]786f1d94, host=localhost:8080, http_requestUrl=http://localhost:8080/bar, id=ce44ad18-4202-a6a6-0870-fc38b87dc8af, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198784356}] 
2016-05-25 10:53:07.508 DEBUG 2478 --- [nio-8080-exec-2] .IntegrationRequestMappingHandlerMapping : Looking up handler method for path /foo 
2016-05-25 10:53:07.508 DEBUG 2478 --- [nio-8080-exec-2] .IntegrationRequestMappingHandlerMapping : Returning handler method [public abstract void org.springframework.web.HttpRequestHandler.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException,java.io.IOException] 
2016-05-25 10:53:07.509 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : preSend on channel 'requestChannel', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=dd3e590d-6a8e-3ac5-035b-e67838708002, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 
2016-05-25 10:53:07.509 DEBUG 2478 --- [nio-8080-exec-2] o.s.i.t.MessageTransformingHandler  : org.springframework.integration.transformer.MessageTransformingHandler#0 received message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=dd3e590d-6a8e-3ac5-035b-e67838708002, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 
2016-05-25 10:53:07.509 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : preSend on channel 'flow.channel#0', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=eef228c6-cc3a-eec9-fe52-d340db69815a, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 
2016-05-25 10:53:07.509 DEBUG 2478 --- [nio-8080-exec-2] i.h.o.HttpRequestExecutingMessageHandler : consumerPostbackGate received message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=eef228c6-cc3a-eec9-fe52-d340db69815a, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 
2016-05-25 10:53:07.578 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : preSend on channel 'flow2.channel#1', message: GenericMessage [payload=<200 OK,{Date=[Wed, 25 May 2016 17:53:07 GMT], Expires=[-1], Cache-Control=[private, max-age=0], Content-Type=[text/html; charset=ISO-8859-1], Content-Encoding=[gzip], Server=[gws], Content-Length=[4452], X-XSS-Protection=[1; mode=block], X-Frame-Options=[SAMEORIGIN]}>, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=8cda5a13-1d7c-983b-ee47-847ae520be3a, http_statusCode=200, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787578}] 
flow2 
2016-05-25 10:53:07.579 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'flow2.channel#1', message: GenericMessage [payload=<200 OK,{Date=[Wed, 25 May 2016 17:53:07 GMT], Expires=[-1], Cache-Control=[private, max-age=0], Content-Type=[text/html; charset=ISO-8859-1], Content-Encoding=[gzip], Server=[gws], Content-Length=[4452], X-XSS-Protection=[1; mode=block], X-Frame-Options=[SAMEORIGIN]}>, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=8cda5a13-1d7c-983b-ee47-847ae520be3a, http_statusCode=200, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787578}] 
2016-05-25 10:53:07.579 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'flow.channel#0', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=eef228c6-cc3a-eec9-fe52-d340db69815a, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 
2016-05-25 10:53:07.579 DEBUG 2478 --- [nio-8080-exec-2] o.s.integration.channel.DirectChannel : postSend (sent=true) on channel 'requestChannel', message: GenericMessage [payload={}, headers={http_requestMethod=GET, replyChannel=org.springframewor[email protected]ecef3f, errorChannel=org.springframewor[email protected]ecef3f, host=localhost:8080, http_requestUrl=http://localhost:8080/foo, id=dd3e590d-6a8e-3ac5-035b-e67838708002, user-agent=curl/7.43.0, accept=*/*, timestamp=1464198787509}] 

Код-нарушителем является:

@SpringBootApplication 
@EnableAutoConfiguration 
@Configuration 
@ComponentScan 
public class SpringIntegrationIssue { 

    public static void main(String[] args) throws Exception { 
     ConfigurableApplicationContext ctx = SpringApplication.run(SpringIntegrationIssue.class, args); 
    } 

    @Autowired 
    private Environment env; 

    @Bean 
    public HttpRequestHandlingMessagingGateway httpGate() { 
     HttpRequestHandlingMessagingGateway gateway = new HttpRequestHandlingMessagingGateway(true); 
     RequestMapping mapping = new RequestMapping(); 
     mapping.setMethods(HttpMethod.GET); 
     mapping.setPathPatterns("/foo"); 
     gateway.setRequestMapping(mapping); 
     gateway.setRequestChannel(requestChannel()); 
     gateway.setRequestPayloadType(byte[].class); 
     return gateway; 
    } 

    @Bean 
    public HttpRequestHandlingMessagingGateway httpGate2() { 
     HttpRequestHandlingMessagingGateway gateway = new HttpRequestHandlingMessagingGateway(true); 
     RequestMapping mapping = new RequestMapping(); 
     mapping.setMethods(HttpMethod.GET); 
     mapping.setPathPatterns("/bar"); 
     gateway.setRequestMapping(mapping); 
     gateway.setRequestChannel(requestChannel2()); 
     gateway.setRequestPayloadType(byte[].class); 
     return gateway; 
    } 

    @Bean 
    public MessageChannel requestChannel() { 
     return new DirectChannel(); 
    } 

    @Bean 
    public MessageChannel requestChannel2() { 
     return new DirectChannel(); 
    } 


    @Bean 
    public IntegrationFlow flow() { 
     return IntegrationFlows.from("requestChannel") 
       .transform(new ObjectToStringTransformer()) 
       .handle(consumerPostbackGate()) 
       .handle(m -> System.out.println("flow")) 
       .get(); 
    } 

    @Bean 
    public IntegrationFlow flow2() { 
     return IntegrationFlows.from("requestChannel2") 
       .transform(new ObjectToStringTransformer()) 
       .handle(consumerPostbackGate()) 
       .handle(m -> System.out.println("flow2")) 
       .get(); 
    } 

    @Bean 
    HeaderMapper headerMapper() { 
     DefaultHttpHeaderMapper headerMapper = new DefaultHttpHeaderMapper(); 
     headerMapper.setExcludedOutboundStandardRequestHeaderNames(new String[]{"host"}); 
     return headerMapper; 
    } 

    @Bean 
    HttpRequestExecutingMessageHandler consumerPostbackGate() { 
     HttpRequestExecutingMessageHandler handler = new HttpRequestExecutingMessageHandler("http://www.google.com/"); 
     handler.setHeaderMapper(headerMapper()); 
     handler.setRequestFactory(new HttpComponentsClientHttpRequestFactory()); 
     handler.setHttpMethod(HttpMethod.HEAD); 
     return handler; 
    } 

} 

ответ

0

Вы не можете использовать один и тот же MessageHandler @Bean в двух различных .handle() методов.

Причина в том, что DSL вводит выходной канал в обработчик, когда поток составлен так, в этом случае выигрывает второй поток.

Если вы изменили @Bean@Scope, прототип должен работать, потому что каждый поток получит свой экземпляр обработчика.

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 

Мы должны, вероятно, обнаружить это в DSL и отклонить конфигурацию; I opened an issue.

У нас есть аналогичная логика, когда вы жестко подключаете bean-компонент с использованием XML.

+0

Измените область видимости исходящего шлюза на прототип. –