Spring integration spring集成aws流上的消息属性导致SQS消息循环,其中';过滤它们最好的地方是哪里?

Spring integration spring集成aws流上的消息属性导致SQS消息循环,其中';过滤它们最好的地方是哪里?,spring-integration,spring-cloud-aws,Spring Integration,Spring Cloud Aws,因此,我创建了两个短流,使用SQS作为处理段之间的后备存储。基本流程是: RestController -> SQS Queue1 OCA SQS Queue1 MDCA -> Service-Adapter -> SQS Queue2 OCA SQS Queue2 MDCA -> Service Adapter 然而,我遇到了几个问题。。。 “SQS Queue1 MDCA”从队列中读取带有AWS特定消息头的消息,这些消息头最终到达出站适配器并写入Queue2

因此,我创建了两个短流,使用SQS作为处理段之间的后备存储。基本流程是:

RestController -> SQS Queue1 OCA
  SQS Queue1 MDCA -> Service-Adapter -> SQS Queue2 OCA
  SQS Queue2 MDCA -> Service Adapter
然而,我遇到了几个问题。。。 “SQS Queue1 MDCA”从队列中读取带有AWS特定消息头的消息,这些消息头最终到达出站适配器并写入Queue2。这些消息头指定了AWS_队列名称、AWS消息id等内容,这些内容会导致消息重新传递到队列1

一旦我过滤掉这些头(我使用了一个简单的自定义转换器来测试),出站通道适配器的属性就会按预期工作,QueueMessagingTemplate将消息传递到适当的队列

因此,我向spring int和spring aws专家提出的问题是,“您认为过滤掉任何预先存在的SQS头的合适位置是什么,这样它们就不会被任何下游SQS处理拾取?”在我看来,您可能希望在SQSHandler中执行此操作,因为它们可能与任何基本spring aws消息传递调用相关

作为旁注,通过从SQS ICA创建消息,并在流中创建json transformer对象,它还导致创建12个消息头,比SQS允许的多2个(导致消息传递失败)

标题稍微修改以保护无辜队列的示例消息。。。如您所见,aws_队列、目的地等仍在从“扳手工作流-mjg”读取的消息中,因此,当尝试传递到下一个队列时,这些头在spring int xml配置中重写了配置,而从未传递到下一个队列。消息只是在SQS队列“扳手工作流程-mjg”中不断循环(在修复了10多个属性问题之后)


如果有必要,我可能会举出一个例子,但我希望您理解我的意思。

我们可能应该在适配器中添加头映射工具,以实现头的选择性映射,就像我们在Spring集成中对其他技术所做的那样

我开了一家商店

同时,您可以将
(或
HeaderFilter
transformer)放在出站适配器的正上游,以移除不需要的标头


您还可以向出站适配器添加一个自定义适配器。

我们可能应该向适配器添加头映射功能,以实现头的选择性映射,就像我们在Spring集成中为其他技术所做的那样

我开了一家商店

同时,您可以将
(或
HeaderFilter
transformer)放在出站适配器的正上游,以移除不需要的标头


您还可以向出站适配器添加自定义项。

就在您的头顶,下面是一个示例,上面的头映射是如何实现的?就在出站适配器之前;如果您能告诉我您使用的是xml还是@Bean配置,我可以用config编辑我的答案。谢谢,但不是必需的。我们是spring int的大量用户,我们已经实现了您建议的解决方案。如果我们能完成这个项目,我能抽出一些时间,我也会尝试一下GitHub的问题。(哦,我们倾向于使用XML来定义流——讽刺的是,与较长的java配置相比,似乎更容易看到使用XML的流。尽管java DSL对于简单流来说看起来相当不错。我的第一个回答是关于github问题的问题——我应该在那里问。再次感谢!你刚刚想起来,wher的例子在哪里上面的头映射已经实现了?就在出站适配器之前;如果你能告诉我你是在使用xml还是@Bean配置,我可以用config编辑我的答案。谢谢,但不是必需的。我们是spring int的大量用户,我们已经实现了你建议的解决方法。如果我们能完成这个项目,我可以如果有时间,我也会尝试一下GitHub的问题。(哦,我们倾向于使用XML来定义流——具有讽刺意味的是,与较长的java配置相比,似乎更容易看到使用XML的流。尽管java DSL对于简单流来说看起来相当不错。我的第一个回答是关于github问题的问题——我应该在那里问一下。再次感谢!
GenericMessage [payload={"eventId":"event-1","eventStartDateTime":1476127827.201000000}, 
headers={aws_messageId=db9b6cc0-f133-4182-b79c-4d5d9717a3a9, ApproximateReceiveCount=1, 
SentTimestamp=1476127827803, id=0b662b72-f149-a970-5e63-64a1b28290fb, 
SenderId=AIDAJOYV7TECZCZCOK22C,
aws_receiptHandle=AQEBdaToWo9utbjBwADeSuChX/KrY3l8eoSBMZ0RMmbI8ewjJQw6tV74RwSYxWPKZBSzgJhCmfJ8AUX+
reOy2yGrmefULU7NS8nqYTdMW6BB4Ug2+mHIY+8Tze+2ws15FB5t96q3iJO8+tP5pl/xuo+CiTDv+
L1rlYkVODD0Yv1zosGKx48IhGOXdL8nJ4Im8bujcUNLJy/vEYD8Qcfsi6NHOF3Qn0A4Xw+Nva0wp86zfq,
aws_queue=wrench_workflow-mjg,
lookupDestination=wrench_workflow-mjg, 
ApproximateFirstReceiveTimestamp=1476127827886, timestamp=1476127836254}