我正在使用像这样配置的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的同时访问标题?
答案 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