【问题标题】:Header values getting lost spring integration标头值丢失弹簧集成
【发布时间】:2018-12-04 19:22:58
【问题描述】:

我正在使用标题丰富器,它使用现有标题来设置新标题的值。然而,现有的标头信息丢失了,只剩下 3 个标头,即请求 ID、时间戳和原始正文。

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 个键,而不是通常存在的所有标题键。我需要使用原始过期重试系统。

我的 spring 集成 xml 有以下 sn-p :

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

【问题讨论】:

    标签: rabbitmq spring-integration amqp


    【解决方案1】:

    首先,您似乎还需要一个 overwrite="true" 来表示该 &lt;int:header name="original_expiration"&gt;,因为您的 vipul() 中的逻辑即将为现有标头生成一个新值,而这不会发生,因为该值是已经在标题中了。

    您在此逻辑中缺少某些标头的事实可能是由某些上游&lt;transformer&gt; 决定的,它返回整个Message 而不复制请求标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多