spring-integration - 回复后可以收到原始消息吗
问题描述
你能帮我做弹簧集成吗?
我有使用 http 将发布请求发送到其他系统的集成流程。
发送后能否得到原始消息,因为我想对成功和错误进行其他操作。
ErrorHandler 只有 HttpClientResponse,但响应正文为空,我需要 originalMessage 来处理这种情况。
与成功响应相同的情况。我没有原始消息信息来进行下一步操作。
@Configuration
public class IntegrationConfiguration {
@Bean
public IntegrationFlow incChannel(HeaderEnricher enrichHeaders,
HttpRequestExecutingMessageHandler notifyOnArrival) {
return IntegrationFlows
.from("send_notify_to")
.transform(enrichHeaders)
.handle(notifyOnArrival)
.channel("save_success_status_original")
.get();
}
@Bean
public HeaderEnricher enrichHeaders() {
Map<String, ? extends HeaderValueMessageProcessor<?>> headersToAdd =
Collections.singletonMap("Content-Type", new StaticHeaderValueMessageProcessor<>(APPLICATION_JSON_VALUE));
HeaderEnricher enricher = new HeaderEnricher(headersToAdd);
return enricher;
}
@Bean
HttpRequestExecutingMessageHandler notifyOnArrival(@Value("${uri}") String uri,
MappingJackson2HttpMessageConverter messageConverter) {
HttpRequestExecutingMessageHandler handler =
new HttpRequestExecutingMessageHandler(uri + "/api/notify");
handler.setHttpMethod(HttpMethod.POST);
handler.setExpectReply(false);
handler.setMessageConverters(Arrays.asList(messageConverter));
return handler;
}
}
解决方案
这.handle(notifyOnArrival)
只是一个服务激活器,带有从请求到回复的所有状态。我们只需要确保我们真正提供这种状态。在消息的上下文中保持状态的最佳位置是将请求消息存储到标头中,然后在之后的回复中或从ErrorMessage
.
headersToAdd.put("originalMesasge", new ExpressionEvaluatingHeaderValueMessageProcessor("#root", Message.class));
因此,您originalMesasge
从请求消息中添加它,并且此消息将由服务激活器逻辑复制到回复消息中。
推荐阅读
- qt - 部署的视频应用程序无法播放 avi 文件
- python - Python 中的 itertools.count 使用什么类型?
- c# - 2D Unity 项目中的 3D 对象
- python - 是否可以将包含许多工作表的多个 excel 文件加载到一个主文件中
- python - PyQt5 应用程序 - 使用计时器运行带有循环的函数使其“冻结”
- javascript - 如何忽略或停止绑定到 DOM 的旧事件?
- html - 样式类似于 input 标签的 required 属性附带的弹出窗口
- python - 使用 PIL.Image 关闭图像后,程序会吸入越来越多的 RAM
- python-3.x - 如何在我的 postgresql 数据库中复制记录?
- python - 优化货币捕获正则表达式