Http出站网关在工作,但没有进行调用--使用spring集成DSL java。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Http出站网关在工作,但没有进行调用--使用spring集成DSL java。相关的知识,希望对你有一定的参考价值。
我是一个spring集成框架的新手。以下是我的代码,我实际上是想使用SI DSL配置的HTTP出站网关进行一些HTTP调用。当我运行这段代码时 IntegrationFlow
方法被调用了,但HTTP命中并没有进行。我不知道为什么。
主类
@EnableIntegration
@Configuration
@Import({ AptHttp.class })
public class DemosiApplication {
public static void main(String[] args) {
SpringApplication.run(DemosiApplication.class, args);
}
}
配置类
@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());
}
}
}
只有以上两个类。当我运行SI应用程序时,我也没有得到任何错误(sysout正在打印,但没有调用,我不知道为什么)。我有另一个应用程序,在那里我可以有一些API通过弹簧集成代码,我试图打的API方法。为了了解HTTP出站网关的流程,我正在尝试这种方式。
谁能帮我建议一下。
你没有显示(或者说没有)将消息发送至的代码。inputChannel
.
该 Http.outboundGateway()
并不是一个活跃的组件,它的工作必须由请求消息触发,而且在Spring应用上下文中有两个主要阶段:创建bean和运行时。
另外,在Spring应用上下文中,有两个主要阶段:创建bean和运行时。System.out.println()
在创建bean的阶段,它与运行时无关。当真正通过HTTP进行发送时,它与运行时无关。
所以,在装箱并启动一个应用上下文(SpringApplication.run(DemosiApplication.class, args);
)你需要采取 inputChannel
豆送 Message<?>
成。只有在这之后,你的HTTP出站网关才会被触发。
更多信息请参见示例。https:/github.comspring-projectsspring-integration-samples。
我分享我的答案,那些谁正在寻找一个HTTP出站网关使用java DSL的例子。
主类
@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。
以上是关于Http出站网关在工作,但没有进行调用--使用spring集成DSL java。的主要内容,如果未能解决你的问题,请参考以下文章
Spring Integration DSL JMS 入站/出站网关
代码检查帮助:Lambda函数调用Amazon Connect API进行出站呼叫