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。