【发布时间】:2021-01-05 11:45:44
【问题描述】:
我有一个名为“creationChannel”的频道,它使用 MongoMessageStore 进行备份,如下所示:
@Bean
ChannelMessageStore messageStore() {
return new MongoDbChannelMessageStore(mongoDatabaseFactory);
}
@Bean
PollableChannel creationChannel(ChannelMessageStore messageStore) {
return MessageChannels.queue("creationChannel", messageStore, "create").get();
}
我想在我的流程中使用它,但我想确定,如果“createOrderHandler”工作正常,来自那里的消息将是只读的(同样适用于“updateOrderHandler”,但使用不同的通道)。
...some code here...
.<HeadersElement, OperationType>route(
payload -> route(payload),
spec -> spec
.transactional(transactionHandleMessageAdvice)
.subFlowMapping(
OperationType.New,
sf -> sf
.channel("creationChannel")
.log(Level.DEBUG, "Creation of a new order", Message::getPayload)
.transform(Mapper::mapCreate)
.handle(createOrderHandler,
handlerSpec -> handlerSpec.advice(retryOperationsInterceptor))
)
.subFlowMapping(
OperationType.Update,
sf -> sf
.channel("updateChannel")
.log(Level.DEBUG, "Update for existing order", Message::getPayload)
.transform(Mapper::mapUpdate)
.handle(updateOrderHandler,
handlerSpec -> handlerSpec.advice(retryOperationsInterceptor))
)
)
...some code here...
我尝试像这样配置“transactionHandleMessageAdvice”:
@Bean
TransactionHandleMessageAdvice transactionHandleMessageAdvice(MongoTransactionManager transactionManager) {
return new TransactionHandleMessageAdvice(transactionManager, new Properties());
}
但在处理程序因异常而失败后,消息仍在从数据库中删除。
也许我应该为子流配置 Poller 并以某种方式使用 MongoTransactionManager 配置它?
【问题讨论】:
标签: java spring spring-integration