rabbitmq - 标头值丢失弹簧集成
问题描述
我使用标题丰富器,它使用现有标题来设置新标题的值。然而,现有的标头信息丢失了,只剩下 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 有以下代码段:
<int:header-enricher input-channel="fromPushAppointmentErrorHandler1"
output-channel="fromPushAppointmentErrorHandler">
<int:header name="original_expiration" method="vipul" ref="errorhelper"/>
</int:header-enricher>
解决方案
首先,您似乎还需要一个overwrite="true"
for ,<int:header name="original_expiration">
因为您的逻辑vipul()
即将为现有标头生成一个新值,并且由于该值已经存在于标头中,因此不会发生这种情况。
您在此逻辑中缺少某些标头的事实可能是由某些上游决定的,该上游在不复制请求标头的情况下<transformer>
返回整体。Message
推荐阅读
- javascript - 如何迭代所有子元素并返回找到的元素?
- laravel - SQLSTATE[HY000]:一般错误:1005 无法创建表`Data`.`company_eligibility`(错误号:150“外键约束格式不正确”)
- spring - 按字段分组,排序并获取 MongoDB 中组的第一个(或最后一个)项目(使用 Spring Data)
- django - 我在哪里定义我想在我的 Django API 中接收的 Content-Type?
- c++ - Eigen ConditionType 数组:广播而不是循环的有效方式
- asp.net - 转发器更新面板中的下拉列表在回发后失去价值
- amazon-web-services - 多个 Restful Api 请求问题导致 nginx 服务器上的重复记录
- docker-compose - Docker Compose 常用 YAML 添加服务名变量
- azure - azure Blob MD5 checksum and local MD5 checksum not matching
- postgresql - Solr Dataimport 来自 PostgreSQL 的嵌套实体