使用标头在http出站通道适配器

时间:2017-02-24 12:34:31

标签: spring-integration

我正在使用像这样配置的bean从兔子队列中消费消息:

IntegrationFlows.from(Amqp.inboundGateway(listenerContainer()).errorChannel(FailedFlow.CHANNEL_NAME))
            .transform(Transformers.fromJson())
            .channel(TestFlow.CHANNEL_NAME)
            .get();

消息通过一些路由器和头文件扩充器以一个配置如下的bean结束出站流程:

IntegrationFlows.from(CHANNEL_NAME)
            .transform(Transformers.toJson())
            .handle(Http.outboundChannelAdapter("http://localhost:8080/api/test")
                            .httpMethod(HttpMethod.POST)
                            .requestFactory(getRequestFactory()))
            .get();

这在测试时工作正常,但是对于实际使用,我需要使用存储在先前添加的标头中的基本URL将请求发送到不同的服务器。

IntegrationFlows.from(CHANNEL_NAME)
            .transform(Transformers.toJson())
            .handle(e -> Http.outboundChannelAdapter(String.format("%s/test",
                    e.getHeaders().get(IntegrationConstants.NOTIFY_BASE_URL_HEADER_NAME)))
            .httpMethod(HttpMethod.POST)
            .requestFactory(getRequestFactory()))
            .get();

似乎在测试配置中我将MessageHandlerSpec传递给handle方法,而在实际配置中我将MessageHandler传递给handle方法。我不确定区别是什么,我所知道的是在传递MessageHandler时没有调用端点。

如何在保持直接使用MessageHandlerSpec的同时访问标题?

1 个答案:

答案 0 :(得分:1)

.handle(IntegrationFlows.from(CHANNEL_NAME)
                    .transform(Transformers.toJson())
                    .handle(Http.outboundChannelAdapter("{baseUrl}/test")
                            .httpMethod(HttpMethod.POST)
                            .requestFactory(getRequestFactory())
                            .uriVariable("baseUrl", e -> e.getHeaders().get(IntegrationConstants.NOTIFY_BASE_URL_HEADER_NAME)))
                    .get())

: - d