Http 出站网关正在工作但未进行调用 - 使用 spring 集成 DSL java
Http outbound gateway is working but not making the call - using spring integration DSL java
我是 spring 集成框架的新手。下面是我的代码,我实际上是在尝试使用 SI DSL 配置使用 HTTP 出站网关进行一些 HTTP 调用。当我 运行 代码时, IntegrationFlow
方法被调用但 HTTP 没有命中。我不确定为什么。
主要class
@EnableIntegration
@Configuration
@Import({ AptHttp.class })
public class DemosiApplication {
public static void main(String[] args) {
SpringApplication.run(DemosiApplication.class, args);
}
}
配置class
@Configuration
@IntegrationComponentScan
public class AptHttp {
@EnableIntegration
public static class ContextConfiguration {
@Bean("inputChannel")
public MessageChannel inputChannel() {
return MessageChannels.direct().get();
}
@Bean
public MessageChannel outputChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test";
return f -> f.channel(inputChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.GET).expectedResponseType(String.class))
.channel(outputChannel());
}
}
}
以上两个class而已。当我 运行 SI 应用程序时,我也没有收到任何错误(sysout 正在打印,但没有进行调用,我不知道为什么)。我有另一个应用程序,我可以通过 spring 集成代码获得一些 API 我正在尝试使用 API 方法。要了解 HTTP 出站网关的流程,我正在尝试这种方式。
任何人都可以在这方面帮助/建议我。
您没有显示(或没有)将消息发送到 inputChannel
的代码。
Http.outboundGateway()
不是活动组件,它的工作必须由请求消息触发。
Spring 应用程序上下文中还有两个主要阶段:bean 创建和运行时。
因此,您会在 bean 创建阶段看到 System.out.println()
。当真正通过 HTTP 发送时,它与运行时无关。
因此,在创建并启动应用程序上下文 (SpringApplication.run(DemosiApplication.class, args);
) 之后,您需要获取一个 inputChannel
bean 并将一个 Message<?>
发送到其中。只有在那之后你的 HTTP 出站网关才会被触发。
在示例中查看更多信息:https://github.com/spring-projects/spring-integration-samples
我正在与正在寻找使用 java DSL 的 HTTP 出站网关示例的人分享我的答案。
主要class
@SpringBootApplication(scanBasePackages="com.testsi")
@EnableIntegration
@IntegrationComponentScan
public class DemosiApplication {
public static void main(String[] args) {
SpringApplication.run(DemosiApplication.class, args);
}
@Bean
@Qualifier("get_send_channel")
MessageChannel getSendChannel() {
return MessageChannels.direct().get();
}
@Bean
@Qualifier("get_receive_channel")
PollableChannel getReceiveChannel() {
return new PriorityChannel() ;
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
System.out.println("inside the command liner ");
return args -> {
Message<?> message = MessageBuilder.withPayload("").build();
System.out.println("Message [ayload =>"+ message.getPayload());
getSendChannel().send(message);
System.out.println("we are getting an output from test application"+getReceiveChannel().receive().getPayload());
};
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test/1";
return IntegrationFlows.from(getSendChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.POST).expectedResponseType(String.class))
.channel(getReceiveChannel()).get();
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test";
return IntegrationFlows.from(getSendChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.GET).expectedResponseType(String.class))
.channel(getReceiveChannel()).get();
}
}
谢谢@Artem Bilan。
我是 spring 集成框架的新手。下面是我的代码,我实际上是在尝试使用 SI DSL 配置使用 HTTP 出站网关进行一些 HTTP 调用。当我 运行 代码时, IntegrationFlow
方法被调用但 HTTP 没有命中。我不确定为什么。
主要class
@EnableIntegration
@Configuration
@Import({ AptHttp.class })
public class DemosiApplication {
public static void main(String[] args) {
SpringApplication.run(DemosiApplication.class, args);
}
}
配置class
@Configuration
@IntegrationComponentScan
public class AptHttp {
@EnableIntegration
public static class ContextConfiguration {
@Bean("inputChannel")
public MessageChannel inputChannel() {
return MessageChannels.direct().get();
}
@Bean
public MessageChannel outputChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test";
return f -> f.channel(inputChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.GET).expectedResponseType(String.class))
.channel(outputChannel());
}
}
}
以上两个class而已。当我 运行 SI 应用程序时,我也没有收到任何错误(sysout 正在打印,但没有进行调用,我不知道为什么)。我有另一个应用程序,我可以通过 spring 集成代码获得一些 API 我正在尝试使用 API 方法。要了解 HTTP 出站网关的流程,我正在尝试这种方式。
任何人都可以在这方面帮助/建议我。
您没有显示(或没有)将消息发送到 inputChannel
的代码。
Http.outboundGateway()
不是活动组件,它的工作必须由请求消息触发。
Spring 应用程序上下文中还有两个主要阶段:bean 创建和运行时。
因此,您会在 bean 创建阶段看到 System.out.println()
。当真正通过 HTTP 发送时,它与运行时无关。
因此,在创建并启动应用程序上下文 (SpringApplication.run(DemosiApplication.class, args);
) 之后,您需要获取一个 inputChannel
bean 并将一个 Message<?>
发送到其中。只有在那之后你的 HTTP 出站网关才会被触发。
在示例中查看更多信息:https://github.com/spring-projects/spring-integration-samples
我正在与正在寻找使用 java DSL 的 HTTP 出站网关示例的人分享我的答案。
主要class
@SpringBootApplication(scanBasePackages="com.testsi")
@EnableIntegration
@IntegrationComponentScan
public class DemosiApplication {
public static void main(String[] args) {
SpringApplication.run(DemosiApplication.class, args);
}
@Bean
@Qualifier("get_send_channel")
MessageChannel getSendChannel() {
return MessageChannels.direct().get();
}
@Bean
@Qualifier("get_receive_channel")
PollableChannel getReceiveChannel() {
return new PriorityChannel() ;
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
System.out.println("inside the command liner ");
return args -> {
Message<?> message = MessageBuilder.withPayload("").build();
System.out.println("Message [ayload =>"+ message.getPayload());
getSendChannel().send(message);
System.out.println("we are getting an output from test application"+getReceiveChannel().receive().getPayload());
};
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test/1";
return IntegrationFlows.from(getSendChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.POST).expectedResponseType(String.class))
.channel(getReceiveChannel()).get();
}
@Bean
public IntegrationFlow outBoundFlow() {
System.out.println("Inside t outBoundFlow flow ");
final String uri = "http://localhost:9090/api/test";
return IntegrationFlows.from(getSendChannel())
.handle(Http.outboundGateway(uri).httpMethod(HttpMethod.GET).expectedResponseType(String.class))
.channel(getReceiveChannel()).get();
}
}
谢谢@Artem Bilan。