当前位置: 首页 > 知识库问答 >
问题:

Spring集成-拆分器/聚合器-以错误的格式结束

越星晖
2023-03-14

我有以下XML负载,我正试图将其用于Spring集成和Spring集成AMQP:

<?xml version="1.0" encoding="UTF-8"?>
<order>
   <items>
      <item_name>Item1</item_name>
   </items>
   <items>
      <item_name>Item2</item_name>
   </items>
   <items>
      <item_name>Item3</item_name>
   </items>
</order>

我正在使用xpath拆分器拆分消息:

<int-xml:xpath-splitter input-channel="amqpInboundChannel" output-channel="aggregateChannel">
    <int-xml:xpath-expression expression="//items"></int-xml:xpath-expression>
</int-xml:xpath-splitter>

我工作正常,消息被分成3条新消息,例如使用此有效负载:

<?xml version="1.0" encoding="UTF-8"?>
<items>
   <item_name>Item1</item_name>
</items>

在此步骤之后,将使用此设置聚合消息:

<int:aggregator input-channel="aggregateChannel" output-channel="channelSJ" message-store="messageStore">
</int:aggregator>

<bean id="messageStore" class="org.springframework.integration.store.SimpleMessageStore" />

作为最后一步,消息将使用此出站通道适配器发送到交换机:

<amqp:outbound-channel-adapter channel="channelSJ" exchange-name="ex_store" routing-key="sj" amqp-template="rabbitTemplate" header-mapper="myHeaderMapper"/>

<int:channel id="channelSJ">
    <int:interceptors>
        <int:wire-tap channel="logger"/>
    </int:interceptors>      
</int:channel>

不幸的是,出现了一些问题,因为我最终得到了这样的有效载荷。我需要它保持XML格式。

共有1个答案

澹台宾白
2023-03-14

您正在向AMQP适配器发送字符串的集合。

默认情况下,该适配器只能处理字符串、字节[]和可序列化的;在这种情况下,他将使用Java序列化,因为集合是可序列化的。

你有几个选择...

  • 在适配器的amqp模板中使用JsonMessageConverter,集合将呈现为JSON
 类似资料:
  • 目前,我正在与spring integration合作开发新的应用程序,并启动了poc,以了解如何处理故障案例。在我的应用程序中,spring integration将接收来自IBM mq的消息,并根据消息类型验证头信息和到不同队列的路由。传入的消息可能是批量消息,所以我使用了spring integration的拆分器和聚合器,并且对技术工作流程有很好的进展和控制。目前我面临的问题很少,我们有I

  • 使用Spring Integr中的拆分器,我拆分了从数据库中的表中选择的数据行。每条消息完成处理后,我想像旧消息一样将每条消息聚合到一条消息中。我该怎么办?我不知道拆分器拆分了多少条消息。我只知道拆分消息头中的相关ID。即使我聚合消息,我也无法制定发布策略。 我如何解决这个问题? 以及是否有任何方法可以使用jdbc-out站网关或jdbc-out站通道适配器一次插入多行数据,而无需使用拆分器插入每

  • 我想使用聚合器从两条消息中创建一条消息,但我不知道如何做到这一点。 目前,我正在从一个目录中读取两个文件,并希望将这些消息聚合为一个。 我的整个项目是这样的: 读入。拉链- 如果我可以在解压缩文件后发送一条包含两个有效负载的消息,那就太好了,但在读取后聚合就足够了。 我的拉链看起来像这样: 它将这些文件放入两个目录中,我使用FileReadingMessageSource再次从中读取它们。我还想只

  • 我一直在使用Spring boot,并且在我的项目中删除了所有文件。不幸的是,它还使用了Spring集成,根据我的经验,Spring集成非常基于。 我有一个场景,要求我有一个聚合器,并让聚合器每隔秒轮询一次。 这可以像这样使用XML来完成(从以前的SO问题中获得的示例): 我已经找到了一个类,这个类有点像是在玩把戏,它的bean定义是: 但是,只有在与此处理程序关联的中接收到新消息时,才触发的方法

  • 我有一个用例,我的消息被拆分两次,我想聚合所有这些消息。如何才能最好地实现这一点,我应该通过引入不同的序列头来聚合消息两次,还是有办法通过重写消息分组的方法在单个聚合步骤中聚合消息?

  • 我有以下应用程序要求: 从RabbitMq接收消息,然后根据一些更复杂的规则进行聚合,例如基于属性(具有预先给定的类型时间映射)和基于消息在队列中等待的现有时间(属性) 正如您在图中看到的一个用例:三条消息已经聚合并等待下一秒发布(因为当前速率为),但就在那时,以到达,并更新了,使其成为优先级最高的第一条消息。因此,在下一个选项中,我们不再发布聚合3,而是发布聚合2,因为它现在具有更高的优先级。