使用 Java DSL 的 Messaging Gateway 回复通道

Reply Channel for Messaging Gateway using Java DSL

我有一个 REST API,它接收来自客户端应用程序的 POST 请求。

@Autowired
private EdiTranslationEvents.TransformToString transformToString;

@PostMapping("/testPost")
@ResponseStatus(HttpStatus.OK)
public String testPostLogging(@RequestBody Student student) {
    log.info("In controller....");
    System.out.println(this.transformToString.objectToInputGateway(student));
    return "testPost logging";
}

如您所见,在控制器中,我有一个自动连接的消息传递网关,我正在使用它向通道发送数据。

@Configuration
@EnableIntegration
public class EdiTranslationEvents {

    @Component
    @MessagingGateway
    public interface TransformToString {

        @Gateway(requestChannel = "inputObjectChannel")
        String objectToInputGateway(Student student);
    }

    @Bean
    public IntegrationFlow inputObjectString() {
        return IntegrationFlows.from(inputObjectChannel())
                .transform(Transformers.objectToString())
                .log(LoggingHandler.Level.DEBUG, "com.dash.Logger")
                .get();
    }
}

当我向 REST API 发送数据时,API 只是挂起。网关没有 return 任何东西。我指定了 return 类型,我假设网关创建了一个临时回复通道并将响应发送到该通道。

但是,我没有在创建或管理回复的 DSL 配置中做任何事情。那么,如何从 DSL 流将回复发送回回复通道?

您当前的流程没有 return 值,您只是在记录消息。

终止 .log() 流程结束。

删除 .log() 元素,这样转换的结果将自动路由回网关。

或者在日志后添加一个.bridge()(无处可去的桥梁),它将输出桥接到回复通道。