如何在响应客户端后拉出有效负载?

时间:2016-08-29 09:47:24

标签: java spring spring-integration

这是当前的代码..

@Bean
public IntegrationFlow flowForHandlingPlainEncryptHistory() {
    return IntegrationFlows.from(InputWithPlainEncryptHistory())
            .handle(ENCRYPT_HISTORY_SERVICE, EXTRACT_ENCRYPT_HISTORY)
            .channel(outputWithPlainStringOfXml()).get();
}

在ENCRYPT_HISTORY中工作的方法
INSERT进入DB并返回成功。

然而,为了提高速度
无条件返回成功,然后尝试INSERT DB。

@Bean
public IntegrationFlow flowForHandlingPlainEncryptHistory() {
    return IntegrationFlows.from(InputWithPlainEncryptHistory())
            .handle(ENCRYPT_HISTORY_SERVICE, "extractEncryptHistoryReturn")
            .channel(outputWithPlainStringOfXml()
            .handle(ENCRYPT_HISTORY_SERVICE, "extractEncryptHistoryInsert").get();
}

@Override
public Object extractEncryptHistoryReturn(Object payload) throws Exception {
    log.debug("[INFO] extractEncryptHistoryReturn payload : {}", payload.toString());

    Map<String, Object> result = initResult();

    result.put(Constant.KEY_NAME_RESULT_CODE, Constant.CODE_SUCCESS);
    result.put(Constant.KEY_NAME_RESULT_MSG, Constant.MSG_SUCCESS);

    return result;
}

@Override
@Transactional
public void extractEncryptHistoryInsert(Object payload) throws Exception {
    log.debug("[INFO] extractEncryptHistoryInsert payload : {}", payload.toString());

    Map<String, Object> params = initParam(payload);

    try {
        long headerInfoSeq = insertHeaderInfo(params);
        insertHeaderAclList(headerInfoSeq, (String) params.get("ACL_COUNT"), (String) params.get("ACL_LIST"));
    } catch (Exception e) {
        log.debug("[ERROR] extractEncryptHistory : Insert errors in the header information and acl list. {}", e.toString());
    }
}

extractEncryptHistoryInsert来自该方法的有效负载不是第一个有效负载。

我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

您需要一个发布订阅频道,每个处理程序都是其订阅者。添加任务执行程序,以便两个处理程序并行运行。

您可以从同一个频道开始使用两个IntegrationFlow,也可以在一个IntegrationFlow bean中使用子流。