我正在实现一个 @InboundChannelAdapter 场景,其中我需要在将消息发送到 AWS SQS 队列后将文件移动到远程存档目录。我已经使用 TransactionSynchronizationFactory 和 ExpressionEvaluatingTransactionSynchronizationProcessor 设置 setAfterCommitExpression 成功实现了与数据库类似的场景。
My Sqs 服务激活器
@Bean
@ServiceActivator(inputChannel = "sqsRequisitionToAlmSendChannel")
public MessageHandler sqsMessageHandler(@Autowired SqsAsyncClient amazonSqs) {
SqsMessageHandler sqsMessageHandler = new SqsMessageHandler(amazonSqs);
sqsMessageHandler.setQueueNotFoundStrategy(QueueNotFoundStrategy.FAIL);
sqsMessageHandler.setQueue(queue_name);
return sqsMessageHandler;
}
通常我建议使用
PublishSubscribeChannel
,只有当第一个订阅者成功时,第二个订阅者才会为同一条消息执行所需的操作。
您还可以查看
ExpressionEvaluatingRequestHandlerAdvice
,并将其 successChannel
选项提供给该 @ServiceActivator
端点。
另请参阅文档:https://docs.spring.io/spring-integration/reference/handler-advice/classes.html#expression-advice