首页 > 解决方案 > 回复后可以收到原始消息吗

问题描述

你能帮我做弹簧集成吗?

我有使用 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;
    }

}

标签: spring-integrationspring-integration-http

解决方案


.handle(notifyOnArrival)只是一个服务激活器,带有从请求到回复的所有状态。我们只需要确保我们真正提供这种状态。在消息的上下文中保持状态的最佳位置是将请求消息存储到标头中,然后在之后的回复中或从ErrorMessage.

headersToAdd.put("originalMesasge", new ExpressionEvaluatingHeaderValueMessageProcessor("#root", Message.class));

因此,您originalMesasge从请求消息中添加它,并且此消息将由服务激活器逻辑复制到回复消息中。


推荐阅读