Spring 集成 - 将完整的消息保存到数据库并再次阅读

Spring integration - save complete message to database and read it again

是否可以将完整的消息序列化为某种格式,例如JSON 并将其保存到数据库。在此之后,我将使用完整的 headers 反序列化消息并将其发送到 amqp。类似于:

<int:object-to-json-transformer object-mapper="mapper" />
<int-jdbc:outbound-channel-adapter channel="srk2" data-source="dataSource" query="insert into messages (serialized_message) values (:message_with_headers)" />

然后

<int-jdbc:inbound-channel-adapter query="SELECT auto_inc_id,serialized_message FROM messages" channel="oc" data-source="dataSource">
<int-amqp:outbound-channel-adapter exchange-name="bookmakers" amqp-template="rabbitTemplate" channel="oc" order="1" />
<int-jdbc:outbound-channel-adapter channel="oc" data-source="dataSource" query="DELETE FROM messages WHERE auto_incr_id IN (:auto_inc_id)" order="2" />

好的。看你可以用 <int:object-to-json-transformer> 或任何其他类似的转换器来做到这一点。但是你必须在它前面放置这个技巧:

<service-activator expression="T(org.springframework.integration.support.MessageBuilder).withPayload(#root)"/>

只是因为第一个只对payload做了转换。因此,要同时存储 headers,您必须将整个消息放置到 payload.

关于此事还有其他组件 - <claim-check> 肯定会将整个消息存储在数据库中:http://docs.spring.io/spring-integration/docs/4.3.5.RELEASE/reference/html/messaging-transformation-chapter.html#claim-check