Spring integration 使用spring集成dsl的动态http入站网关

Spring integration 使用spring集成dsl的动态http入站网关,spring-integration,spring-integration-dsl,spring-integration-http,Spring Integration,Spring Integration Dsl,Spring Integration Http,我正在尝试使用JavaDSL为HTTP入站网关创建和注册运行时集成流,代码如下所示 @Autowired private IntegrationFlowContext flowContext; public static void main(String[] args) { SpringApplication.run(RestClientDemoApplication.class, args); } @ServiceActivator(inputChannel="httpReques

我正在尝试使用JavaDSL为HTTP入站网关创建和注册运行时集成流,代码如下所示

@Autowired
private IntegrationFlowContext flowContext;

public static void main(String[] args) {
    SpringApplication.run(RestClientDemoApplication.class, args);
}

@ServiceActivator(inputChannel="httpRequest")
public String upCase(String in) {
    System.out.println("message received" + in);
    return in.toUpperCase();
}

@Bean
public MessageChannel directChannel(){
    return MessageChannels.direct().get();
}

/*@Bean
public IntegrationFlow inbound() {
    return IntegrationFlows.from(Http.inboundGateway("/foo")
            .requestMapping(m -> m.methods(HttpMethod.POST))
            .requestPayloadType(String.class).replyChannel(directChannel()))
        .channel("httpRequest")
        .get();
}
*/


@Override
public void run(String... args) throws Exception {
     IntegrationFlow flow;
     IntegrationFlowRegistration theFlow;
    flow = IntegrationFlows.from(Http.inboundGateway("/foo")
                .requestMapping(m -> m.methods(HttpMethod.POST))
                .requestPayloadType(String.class).replyChannel(directChannel()))
            .channel("httpRequest")
            .get();

      theFlow = this.flowContext.registration(flow).register();
}
在这种情况下,我的请求url(“/foo”)没有与服务器进行映射,因为当我从HTTP客户端发送消息时,服务器端没有收到任何消息。 但是当我取消注释上述bean(入站)时,即为集成流创建bean并在run方法中注释流创建和注册代码(删除运行时集成流代码) 如下所示,工作正常:

@Autowired
private IntegrationFlowContext flowContext;

public static void main(String[] args) {
    SpringApplication.run(RestClientDemoApplication.class, args);
}

@ServiceActivator(inputChannel="httpRequest")
public String upCase(String in) {
    System.out.println("message received" + in);
    return in.toUpperCase();
}

@Bean
public MessageChannel directChannel(){
    return MessageChannels.direct().get();
}

@Bean
public IntegrationFlow inbound() {
    return IntegrationFlows.from(Http.inboundGateway("/foo")
            .requestMapping(m -> m.methods(HttpMethod.POST))
            .requestPayloadType(String.class).replyChannel(directChannel()))
        .channel("httpRequest")
        .get();
}



@Override
public void run(String... args) throws Exception {


     /*IntegrationFlow flow;
     IntegrationFlowRegistration theFlow;

     flow = IntegrationFlows.from(Http.inboundGateway("/foo")
                .requestMapping(m -> m.methods(HttpMethod.POST))
                .requestPayloadType(String.class).replyChannel(directChannel()))
            .channel("httpRequest")
            .get();

      theFlow = this.flowContext.registration(flow).register();*/ 
}
我的HTTP出站网关代码如下

    flow = IntegrationFlows.from(directChannel()).handle(Http.outboundGateway("https://localhost:8448/foo")
            .httpMethod(HttpMethod.POST).expectedResponseType(String.class)).channel("httpReply").get();

    theFlow = this.flowContext.registration(flow).register();
请帮助我解决上述问题,如果此方法不合适,请提供在运行时创建Http入站网关的解决方案。

这还不可能:

不幸的是,没有简单的解决方法可以让您继续,除非您只能公开一个REST端点,并根据接受的HTTP请求在
IntegrationFlow
内部进行路由