ããã¯ããªã«ãããããŠæžãããã®ïŒ
å°ãåã«ãSpring Integrationã詊ããŠã¿ãŸããã
Spring Integrationを試してみる - CLOVER🍀
ä»ã«ããã¥ã¡ã³ããèªãã§ããŠãGatewayã䜿ã£ãŠã¿ãªããšå šäœã®ã€ã¡ãŒãžãæŽããªãæ°ãããã®ã§ã1å詊ããŠã¿ããããªãšã
Gateway
Gatewayã¯ãOverviewå ã«ãå°ãåºãŠããŸããrequest - replyãªåœ¢åŒããµããŒãããããã§ãã
request-reply MessagingGatewaySupport implementations (such as AmqpInboundGateway and AbstractWebServiceInboundGateway).
Spring Integration Overview / Finding Class Names for Java and DSL Configuration
ãã£ãšè©³çŽ°ã«æžãããŠãããMessaging Gatewayã«é¢ããããã¥ã¡ã³ãã¯ãã¡ãã
Messaging Endpoints / Messaging Gateways
Gatewayã¯ãSpring Integrationã«ãã£ãŠæäŸããã¡ãã»ãŒãžã³ã°APIãé ãããã®ã ãšãããŠããŸãã
A gateway hides the messaging API provided by Spring Integration. It lets your applicationâs business logic be unaware of the Spring Integration API.
ãã¡ããèŠããšãã€ã³ã¿ãŒãã§ãŒã¹ã«å¯Ÿãããããã·ãçæããSpring Integrationãå éšã§åŒã³åºãä»çµã¿ã«ãªãããã§ãã
Spring Integration provides the GatewayProxyFactoryBean, which generates a proxy for any interface and internally invokes the gateway methods shown below. By using dependency injection, you can then expose the interface to your business methods.
Messaging Endpoints / Messaging Gateways / Enter the GatewayProxyFactoryBean
Messaging Endpoints / Messaging Gateways / Gateway XML Namespace Support
ãããããšãSpring Integrationã䜿ãããŠããããšãåŒã³åºãå ãæèããªããªãããšããããšã§ããã
With this configuration defined, the cafeService can now be injected into other beans, and the code that invokes the methods on that proxied instance of the Cafe interface has no awareness of the Spring Integration API. The general approach is similar to that of Spring Remoting (RMI, HttpInvoker, and so on).
ãã䌌ãã¢ãããŒããåã£ãŠãããã®ãšããŠãRMIãªã©ãæããããŠããŸãã
ãã®ããããèŠããšãè£ã§ã¯ïŒReplyçšã®ïŒChannelã䜿ã£ãSpring Integrationã®ä»çµã¿ãåäœããããã§ããã
Typically, you need not specify the default-reply-channel, since a Gateway auto-creates a temporary, anonymous reply channel, where it listens for the reply. However, some cases may prompt you to define a default-reply-channel (or reply-channel with adapter gateways, such as HTTP, JMS, and others).
Messaging Endpoints / Messaging Gateways / Setting the Default Reply Channel
å éšçãªåäœã説æãããŠããã®ã§ãã¡ãã£ãšèŠãŠã¿ãŸãããã
- Gatewayã¯ãäžæçãªpoint-to-pointãªãªãã©ã€çšã®Channelãäœæãã
- å¿åã§ãããã¡ãã»ãŒãžããããŒã远å ããã
- æç€ºçãª
default-reply-channel
ãæå®ããå ŽåïŒRemote Adapter Gatewayãšäžç·ã«reply-channel
ãæå®ããå ŽåïŒã¯ãpublish-subscribe Channelãæå®ã§ãã- ãã®å Žåãè€æ°ã®Subscriberãæå®å¯èœ
- Spring Integrationã¯ãäžæçãª
reply-channel
ãšæç€ºçãªdefault-reply-channel
ãšã®éã«ããªããžãäœæãã
For some background, we briefly discuss some of the inner workings of the gateway. A gateway creates a temporary point-to-point reply channel. It is anonymous and is added to the message headers with the name, replyChannel. When providing an explicit default-reply-channel (reply-channel with remote adapter gateways), you can point to a publish-subscribe channel, which is so named because you can add more than one subscriber to it. Internally, Spring Integration creates a bridge between the temporary replyChannel and the explicitly defined default-reply-channel.
ãŸãããªãã©ã€ãGatewayã ãã§ãªãä»ã®Consumerã«éä¿¡ãããå Žåã¯ããµãã¹ã¯ã©ã€ããè¡ãããã«æç€ºçãªååä»ããããChannelã
äœãå¿
èŠããããŸãããã®Channelã¯ãpublish-subscribe-channelãšããŠæ©èœããŸã
Suppose you want your reply to go not only to the gateway but also to some other consumer. In this case, you want two things: - A named channel to which you can subscribe - That channel to be a publish-subscribe-channel
Messaging Endpoints / Messaging Gateways / Setting the Default Reply Channel
ãšãæžããŠããŠãæŽããªããšãããããã®ã§ãããšã¯å®éã«ãœãŒã¹ã³ãŒããæžããŠåãããŠã¿ãŸãããã
ç°å¢
ä»åã®ç°å¢ã¯ããã¡ãã
$ java --version openjdk 17.0.3 2022-04-19 OpenJDK Runtime Environment (build 17.0.3+7-Ubuntu-0ubuntu0.20.04.1) OpenJDK 64-Bit Server VM (build 17.0.3+7-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing) $ mvn --version Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0) Maven home: $HOME/.sdkman/candidates/maven/current Java version: 17.0.3, vendor: Private Build, runtime: /usr/lib/jvm/java-17-openjdk-amd64 Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "5.4.0-109-generic", arch: "amd64", family: "unix"
ãããžã§ã¯ããäœæãã
ãŸãã¯ãSpring Bootãããžã§ã¯ããäœæããŸããäŸåé¢ä¿ã«ãweb
ãšintegration
ãå ããŸããã
$ curl -s https://start.spring.io/starter.tgz \ -d bootVersion=2.6.7 \ -d javaVersion=17 \ -d name=integration-gateway-example \ -d groupId=org.littlewings \ -d artifactId=integration-gateway-example \ -d version=0.0.1-SNAPSHOT \ -d packageName=org.littlewings.spring.integration \ -d dependencies=web,integration \ -d baseDir=integration-gateway-example | tar zxvf -
ãããžã§ã¯ãå ã«ç§»åã
$ cd integration-gateway-example
ããã©ã«ãã§çæããããœãŒã¹ã³ãŒãã¯åé€ããŠãããŸãã
$ rm src/main/java/org/littlewings/spring/integration/IntegrationGatewayExampleApplication.java src/test/java/org/littlewings/spring/integration/IntegrationGatewayExampleApplicationTests.java
Mavenã®äŸåé¢ä¿ããã©ã°ã€ã³ã®èšå®ãèŠãŠãããŸãã
<properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-http</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
Spring Web MVCãšSpring Integrationãæå®ãããšãspring-integration-http
ãã€ããŠãããã§ããã
ãã¡ãã®ããšã§ããã
ãã£ãããªã®ã§ããã¡ãã䜿ã£ãŠç°¡åãªãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ãäœæããããšæããŸãã
ãšãããããmain
ã¯ã©ã¹ã ãã¯çšæããŠãããŸãã
src/main/java/org/littlewings/spring/integration/App.java
package org.littlewings.spring.integration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String... args) { SpringApplication.run(App.class, args); } }
ãé¡
ãé¡ã¯ãEchoããã°ã©ã ã«ããŸãããã
ãããªæãã®ã¯ã©ã¹ããªã¯ãšã¹ããšããŠåãåãã
src/main/java/org/littlewings/spring/integration/RequestMessage.java
package org.littlewings.spring.integration; public class RequestMessage { String request; public String getRequest() { return request; } public void setRequest(String request) { this.request = request; } }
ã¬ã¹ãã³ã¹ããã¡ãã§è¿ãããã°ã©ã ãäœãããšã«ããŸãã
src/main/java/org/littlewings/spring/integration/ResponseMessage.java
package org.littlewings.spring.integration; public class ResponseMessage { String response; public String getResponse() { return response; } public void setResponse(String response) { this.response = response; } }
ãªã¯ãšã¹ãã¯ãJSONã§åãåãããã«ããŸãããã
æåã¯Gatewayãã·ã³ãã«ã«äœ¿ããæ¬¡ã«Spring Integrationã®HTTPãµããŒãã䜿ã£ããã¿ãŒã³ãäœã£ãŠãããŸãã
Gatewayãã·ã³ãã«ã«äœ¿ã
ãŸãã¯ãGatewayãã·ã³ãã«ã«äœ¿ã£ãŠã¿ãŸãã
ãã¡ããèŠã€ã€ã
Messaging Endpoints / Messaging Gateways / Gateway Configuration with Annotations and XML
Messaging Endpoints / Messaging Gateways / @MessagingGateway Annotation
@MessagingGateway
ã¢ãããŒã·ã§ã³ãšã@Gateway
ã¢ãããŒã·ã§ã³ãä»äžããã€ã³ã¿ãŒãã§ãŒã¹ãäœãã°ããããã§ãã
src/main/java/org/littlewings/spring/integration/simple/EchoService.java
package org.littlewings.spring.integration.simple; import org.littlewings.spring.integration.RequestMessage; import org.littlewings.spring.integration.ResponseMessage; import org.springframework.integration.annotation.Gateway; import org.springframework.integration.annotation.MessagingGateway; @MessagingGateway public interface EchoService { @Gateway(requestChannel = "echoRequestChannel") ResponseMessage execute(RequestMessage request); }
request-channelã¯echoRequestChannel
ãšããŠãããŸãã
GatewayProxyFactoryBean
ã䜿ã£ãŠå®çŸ©ããæ¹æ³ãããããã§ããã
Messaging Endpoints / Messaging Gateways / / Enter the GatewayProxyFactoryBean
ä»åã¯ãå®çŸ©ããEchoService
ã€ã³ã¿ãŒãã§ãŒã¹ãDIããŠäœ¿ãããšã«ããã®ã§ãã¢ãããŒã·ã§ã³ã䜿ã£ãŠå®çŸ©ããŠã³ã³ããŒãã³ãã¹ãã£ã³ããŠ
ãããããšã«ããŸãããã
次ã«ãIntegrationFlow
ãå®çŸ©ããŸãã
src/main/java/org/littlewings/spring/integration/simple/EchoGatewayConfig.java
package org.littlewings.spring.integration.simple; import org.littlewings.spring.integration.RequestMessage; import org.littlewings.spring.integration.ResponseMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; @Configuration public class EchoGatewayConfig { @Bean public IntegrationFlow reply() { return IntegrationFlows .from("echoRequestChannel") .<RequestMessage>handle((payload, header) -> { Logger logger = LoggerFactory.getLogger(EchoGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue())); String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response; }) .get(); } }
å
ã»ã©ã®ã€ã³ã¿ãŒãã§ãŒã¹ã§å®çŸ©ãããechoRequestChannel
ããµãã¹ã¯ã©ã€ãããŠåŠçããGenericHandler
ãå®çŸ©ããŸãããã
Java DSL / Service Activators and the .handle() method
ããããŒããã°åºåããŠ
Logger logger = LoggerFactory.getLogger(EchoGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue()));
ãªã¯ãšã¹ãã®å 容ãå å·¥ããŠè¿ãããã«ããŸãã
String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response;
ã§ã¯ããã®ã€ã³ã¿ãŒãã§ãŒã¹ã䜿ãRestController
ãå®çŸ©ããŸãã
src/main/java/org/littlewings/spring/integration/simple/EchoController.java
package org.littlewings.spring.integration.simple; import org.littlewings.spring.integration.RequestMessage; import org.littlewings.spring.integration.ResponseMessage; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { EchoService echoService; public EchoController(EchoService echoService) { this.echoService = echoService; } @PostMapping("echo") public ResponseMessage echo(@RequestBody RequestMessage request) { return echoService.execute(request); } }
ã§ã¯ãåãããŠã¿ãŸãããã
$ mvn spring-boot:run
確èªã
$ curl -H 'Content-Type: application/json' localhost:8080/echo -d '{"request": "Hello World"}' {"response":"â â â Hello World â â â "}
RestController
ã§åãåã£ãå
容ã
@PostMapping("echo") public ResponseMessage echo(@RequestBody RequestMessage request) { return echoService.execute(request); }
ãã¡ãã§å®çŸ©ããGenericHandler
ã§ãã³ããªã³ã°ãããŠããã®ãããããŸããã
@Bean public IntegrationFlow reply() { return IntegrationFlows .from("echoRequestChannel") .<RequestMessage>handle((payload, header) -> { Logger logger = LoggerFactory.getLogger(EchoGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue())); String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response; }) .get(); }
ããããŒã¯ããããªæãã§ãã°åºåãããŸããã
2022-05-01 20:51:39.608 INFO 21766 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = replyChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@b9c6c95 2022-05-01 20:51:39.609 INFO 21766 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = errorChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@b9c6c95 2022-05-01 20:51:39.609 INFO 21766 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = id, value = 4834b4ac-ac57-0d4a-5f15-2631733b86d5 2022-05-01 20:51:39.609 INFO 21766 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = timestamp, value = 1651405899607
ãšããããã§ãRestController
ããèŠãæã¯ãµã€ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãªã®ã«ãè£ã§ã¯Spring IntegrationãåäœããŠãããšãã仿ãã
Gatewayã ãšããããšã確èªã§ããŸããã
@RestController public class EchoController { EchoService echoService; public EchoController(EchoService echoService) { this.echoService = echoService; } @PostMapping("echo") public ResponseMessage echo(@RequestBody RequestMessage request) { return echoService.execute(request); } }
ããã§ã1床ã¢ããªã±ãŒã·ã§ã³ã忢ããŠãããŸãã
HTTPãµããŒãã䜿ã£ãŠã¿ã
次ã«ãSpring Integrationã®HTTPãµããŒãã䜿ã£ãŠã¿ãŸãããã
ä»åã¯ãèªåã§Gatewayã¯äœæããŸãããHTTPãµããŒããæäŸããŠããHttpRequestHandlingMessagingGateway
ã䜿ããŸãã
HTTP Support / Http Inbound Components
RestController
ãäœæãããHttpRequestHandlingMessagingGateway
ããªã¯ãšã¹ããåãä»ããã¬ã¹ãã³ã¹ãè¿ããŸãã
ãªããä»åã¯äœ¿ããŸãããããããHTTPã¯ã©ã€ã¢ã³ãã«çžåœããHttpRequestExecutingMessageHandler
ãããããã§ãã
HTTP Support / HTTP Outbound Components
ã§ã¯ãConfiguration
ãäœæããŸãã
src/main/java/org/littlewings/spring/integration/http/HttpGatewayConfig.java
package org.littlewings.spring.integration.http; import org.littlewings.spring.integration.simple.EchoService; import org.littlewings.spring.integration.RequestMessage; import org.littlewings.spring.integration.ResponseMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; import org.springframework.integration.http.dsl.Http; @Configuration public class HttpGatewayConfig { @Bean public IntegrationFlow httpInbound() { return IntegrationFlows .from( Http .inboundGateway("http-gateway") .requestMapping(mapping -> mapping.methods(HttpMethod.POST)) .requestPayloadType(RequestMessage.class) .get() ) .channel("httpInboundChannel") .get(); } @Bean public IntegrationFlow handler() { return IntegrationFlows .from("httpInboundChannel") .<RequestMessage>handle((payload, header) -> { Logger logger = LoggerFactory.getLogger(HttpGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue())); String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response; }) .get(); } }
ãªã¯ãšã¹ããåãä»ããŠã¬ã¹ãã³ã¹ãè¿ãGatewayã¯ããã®éšåã§ããã
@Bean public IntegrationFlow httpInbound() { return IntegrationFlows .from( Http .inboundGateway("http-gateway") .requestMapping(mapping -> mapping.methods(HttpMethod.POST)) .requestPayloadType(RequestMessage.class) .get() ) .channel("httpInboundChannel") .get(); }
http-gateway
ãšãããã¹ã«ãããã³ã°ããããšã«ããŸããã
HttpRequestHandlingMessagingGateway
ã¯ãJava DSLã§Http
ãšããã¯ã©ã¹ã䜿ã£ãŠçµã¿ç«ãŠãŠããŸãã
Http (Spring Integration 5.5.11 API)
HTTP Support / Configuring HTTP Endpoints with Java
ãªã¯ãšã¹ãã®å
å®¹ãæ±ã£ãŠããéšåã¯ãå
ã»ã©ã®ã·ã³ãã«ã«Gatewayãäœæããå Žåãšåãããã«ïŒGenericHandler
ïŒäœæããŸããã
@Bean public IntegrationFlow handler() { return IntegrationFlows .from("httpInboundChannel") .<RequestMessage>handle((payload, header) -> { Logger logger = LoggerFactory.getLogger(HttpGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue())); String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response; }) .get(); }
å床起åã
$ mvn spring-boot:run
確èªã
$ curl -H 'Content-Type: application/json' localhost:8080/http-gateway -d '{"request": "Hello World"}' {"response":"â â â Hello World â â â "}
å ã»ã©ãšåãçµæã«ãªããŸãããã
ãã°åºåãããããããŒã®æ å ±ã
2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = content-length, value = 26 2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = http_requestMethod, value = POST 2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = replyChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@95d3903 2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = errorChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@95d3903 2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = host, value = localhost:8080 2022-05-01 21:22:46.391 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = http_requestUrl, value = http://localhost:8080/http-gateway 2022-05-01 21:22:46.392 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = id, value = 0ee3cfdb-b4e3-7500-d571-8f39e973fee1 2022-05-01 21:22:46.392 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = contentType, value = application/json;charset=UTF-8 2022-05-01 21:22:46.392 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = user-agent, value = curl/7.68.0 2022-05-01 21:22:46.392 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = accept, value = */* 2022-05-01 21:22:46.392 INFO 21766 --- [nio-8080-exec-3] o.l.s.i.http.HttpGatewayConfig : header: name = timestamp, value = 1651407766391
æåŸã«å°ãæ»ãã§ããã¡ãã®GenericHandler
ã䜿ã£ãå®çŸ©ãã³ã¡ã³ãã¢ãŠãããŠ
//@Bean public IntegrationFlow handler() { return IntegrationFlows .from("httpInboundChannel") .<RequestMessage>handle((payload, header) -> { Logger logger = LoggerFactory.getLogger(HttpGatewayConfig.class); header.entrySet().forEach(entry -> logger.info("header: name = {}, value = {}", entry.getKey(), entry.getValue())); String message = payload.getRequest(); ResponseMessage response = new ResponseMessage(); response.setResponse("â â â " + message + " â â â "); return response; }) .get(); }
å ã»ã©äœæããã€ã³ã¿ãŒãã§ãŒã¹ãšGatewayã䜿ã£ãŠã¿ãŸãã
@Bean public IntegrationFlow delegate(EchoService echoService) { return IntegrationFlows .from("httpInboundChannel") .handle(echoService, "execute") .get(); }
ã¢ããªã±ãŒã·ã§ã³ãèµ·åã
$ mvn spring-boot:run
å ã»ã©ãšåãçµæã«ãªããŸããã
$ curl -H 'Content-Type: application/json' localhost:8080/http-gateway -d '{"request": "Hello World"}' {"response":"â â â Hello World â â â "}
ãã°ã¯ãæåã«äœæããConfiguration
ã§ã®ãã°ã«ãªã£ãŠããŸããã
2022-05-01 21:34:47.562 INFO 24136 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = replyChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@56354fec 2022-05-01 21:34:47.563 INFO 24136 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = errorChannel, value = org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@56354fec 2022-05-01 21:34:47.564 INFO 24136 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = id, value = e710a00d-3ea4-1f55-38e9-8421c2fcec99 2022-05-01 21:34:47.564 INFO 24136 --- [nio-8080-exec-1] o.l.s.i.simple.EchoGatewayConfig : header: name = timestamp, value = 1651408487562
ãšããããããããªãšããã§ããããã
ãŸãšã
Spring Integrationã®Gatewayã詊ããŠã¿ãŸããã
ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ãå®çŸã§ãããã®ã ãšããããšã¯ååããã¥ã¡ã³ããèŠãŠé°å²æ°ã¯ããã£ãŠããŸãããããã䜿ãããšãããšãªããªã
å
¥ãæ¹ãããããªããŠèŠåŽããŸããâŠã
ãšãããããèªåã§Gatewayãäœã£ãŠã¿ãã®ãšããã§ã«å®è£ æžã¿ã®Gatewayã䜿ã£ãŠã¿ããã¿ãŒã³ã¯ã§ããã®ã§ãããšããŸãããã