Http исходящий шлюз работает, но не выполняет вызов - с помощью пружинной интеграции DSL java - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок ie в рамках весенней интеграции. Ниже приведен мой код, на самом деле я пытаюсь выполнить некоторые HTTP-вызовы, используя исходящий HTTP-шлюз, используя конфигурацию SI DSL. Когда я запускал код, вызывались методы 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 исходящего шлюза, я пытаюсь таким образом.

Может ли кто-нибудь помочь / подсказать мне по этому вопросу.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Вы не показываете (или не имеете) код, который отправляет сообщения в inputChannel.

Http.outboundGateway() не является активным компонентом, и его работа должна инициироваться сообщение-запрос.

Также в контексте приложения Spring есть два основных этапа: создание компонента и время выполнения. Итак, вы видите это System.out.println() на этапе создания бина. Это не имеет ничего общего со временем выполнения, когда действительно происходит передача по HTTP.

Итак, после создания и запуска контекста приложения (SpringApplication.run(DemosiApplication.class, args);) вам нужно взять бин inputChannel и отправить Message<?> внутрь. Только после этого ваш HTTP-шлюз будет запущен.

См. Дополнительную информацию в примерах: https://github.com/spring-projects/spring-integration-samples

0 голосов
/ 23 апреля 2020

Я делюсь своим ответом с теми, кто ищет пример для исходящего 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();
        }
        }

Спасибо @ Артем Билан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...