标头值迷失了Spring集成

时间:2018-12-04 19:22:59

标签: rabbitmq spring-integration amqp

我正在使用标头增强器,它使用现有的标头来设置新标头的值。但是,现有的标头信息会丢失,仅保留3个标头,即request-id,timestamp和raw-body。

public String vipul(Message<String> message) {
    MessageHeaders messageHeaders  =message.getHeaders();
    if (messageHeaders.containsKey("x-death")) {
        List<HashMap<String, Object>> deathList = (List<HashMap<String, Object>>) messageHeaders
                .get("x-death");
        //logger.debug(message.get("messageId")+" "+deathList);
        if (deathList.size() > 0) {
            HashMap<String, Object> death = deathList.get(0);
            if (death.containsKey("original-expiration")) {
                return (String) death.get("original-expiration");
                //logger.info(messageHeaders.get("messageId")+" original-expiration = "+death.get("original-expiration"));
            } 
        } 
    } else {
        return null;
    }
    return "";
}

在此messageHeaders映射中只有3个键,而不是通常存在的所有标头键。我需要使用原始到期时间创建一个重试系统。

MY spring集成xml具有以下代码段:

<int:header-enricher input-channel="fromPushAppointmentErrorHandler1"
         output-channel="fromPushAppointmentErrorHandler">
     <int:header name="original_expiration" method="vipul" ref="errorhelper"/> 
</int:header-enricher>

1 个答案:

答案 0 :(得分:1)

首先,您似乎还需要overwrite="true"的{​​{1}},因为<int:header name="original_expiration">中的逻辑即将为现有的标头产生一个新值,并且不会继续之所以会发生,是因为标头中已经存在该值。

您在逻辑中缺少某些标头的事实可能是由某些上游vipul()决定的,该<transformer>返回整个Message,而没有复制请求标头。