Spring 集成:REST 到 JMS 集成出现超时错误
Spring Integration : REST to JMS integration giving timeout error
您好,我正在尝试使用 Spring 集成实现以下流程。
公开 REST 服务,操作负载,将更改后的负载写入 JMS 并响应 REST 服务。
@Bean
public IntegrationFlow httpInputFlow() {
return IntegrationFlows
.from(Http.inboundGateway(“/company”)
.requestMapping(r -> r
.methods(HttpMethod.POST))
.requestPayloadType(com.poc.model.Company.class))
.transform(jsonToObjectTransformer())
.channel(requestChannel())
.get();
}
@Bean
@Transformer(inputChannel=“requestChannel”, outputChannel=“responseChannel”)
ObjectToJsonTransformer jsonToObjectTransformer() {
return new ObjectToJsonTransformer();
}
@Bean
public DirectChannel requestChannel() {
return MessageChannels.direct().get();
}
@Bean
public DirectChannel responseChannel() {
return MessageChannels.direct().get();
}
@Bean
IntegrationFlow outboundFlow() throws Exception {
return IntegrationFlows.from(responseChannel()) .handle(Jms.outboundAdapter(connectionFactory()).destination(“samplequeue”))
.get();
}
请求负载正在到达队列。但是,REST 服务超时没有回复。我需要将转换后的有效载荷放入队列中,并发送到其余服务的响应中。我找不到任何可用的示例。
感谢任何帮助。
responseChannel
必须是 publishSubscribe
并且您应该再有一个 bridge
订阅者以便将回复发送回 HTTP 入站网关。 one-way 组件中的 Jms.outboundAdapter()
不产生任何回复。这就是您的流程停止并且不响应入口点的方式。
你的use-case可以这样写:
@Bean
public IntegrationFlow httpInputFlow() {
return IntegrationFlows
.from(Http.inboundGateway("/company")
.requestMapping(r -> r
.methods(HttpMethod.POST))
.reqestPayloadType(com.poc.model.Company.class))
.transform(jsonToObjectTransformer())
.publishSubscribeChannel(subscribers ->
subscribers.subscribe(f -> f
.handle(Jms.outboundAdapter(connectionFactory()).destination("samplequeue"))))
.bridge(null)
.get();
}
publishSubscribeChannel()
提供所需频道。
subscribers.subscribe()
添加 Jms.outboundAdapter()
作为第一个订阅者。
.bridge()
作为最后一个(在我们的例子中是第二个)订阅者添加到那个 publishSubscribeChannel()
。
BridgeHandler
背后的想法是将回复发送到 replyChannel
header,Http.inboundGateway()
。
您好,我正在尝试使用 Spring 集成实现以下流程。 公开 REST 服务,操作负载,将更改后的负载写入 JMS 并响应 REST 服务。
@Bean
public IntegrationFlow httpInputFlow() {
return IntegrationFlows
.from(Http.inboundGateway(“/company”)
.requestMapping(r -> r
.methods(HttpMethod.POST))
.requestPayloadType(com.poc.model.Company.class))
.transform(jsonToObjectTransformer())
.channel(requestChannel())
.get();
}
@Bean
@Transformer(inputChannel=“requestChannel”, outputChannel=“responseChannel”)
ObjectToJsonTransformer jsonToObjectTransformer() {
return new ObjectToJsonTransformer();
}
@Bean
public DirectChannel requestChannel() {
return MessageChannels.direct().get();
}
@Bean
public DirectChannel responseChannel() {
return MessageChannels.direct().get();
}
@Bean
IntegrationFlow outboundFlow() throws Exception {
return IntegrationFlows.from(responseChannel()) .handle(Jms.outboundAdapter(connectionFactory()).destination(“samplequeue”))
.get();
}
请求负载正在到达队列。但是,REST 服务超时没有回复。我需要将转换后的有效载荷放入队列中,并发送到其余服务的响应中。我找不到任何可用的示例。
感谢任何帮助。
responseChannel
必须是 publishSubscribe
并且您应该再有一个 bridge
订阅者以便将回复发送回 HTTP 入站网关。 one-way 组件中的 Jms.outboundAdapter()
不产生任何回复。这就是您的流程停止并且不响应入口点的方式。
你的use-case可以这样写:
@Bean
public IntegrationFlow httpInputFlow() {
return IntegrationFlows
.from(Http.inboundGateway("/company")
.requestMapping(r -> r
.methods(HttpMethod.POST))
.reqestPayloadType(com.poc.model.Company.class))
.transform(jsonToObjectTransformer())
.publishSubscribeChannel(subscribers ->
subscribers.subscribe(f -> f
.handle(Jms.outboundAdapter(connectionFactory()).destination("samplequeue"))))
.bridge(null)
.get();
}
publishSubscribeChannel()
提供所需频道。
subscribers.subscribe()
添加 Jms.outboundAdapter()
作为第一个订阅者。
.bridge()
作为最后一个(在我们的例子中是第二个)订阅者添加到那个 publishSubscribeChannel()
。
BridgeHandler
背后的想法是将回复发送到 replyChannel
header,Http.inboundGateway()
。