c# 多实例微服务 - 取消任务

问题描述 投票:0回答:1

目前我有一个作为单例实现的长时间运行的任务。

为了确保未来的可扩展性,我希望此任务在多实例环境中工作并确保它只运行一次。

我开始实现 IDistributedCache 接口,以从我的服务的任何实例获取任务的状态。

现在我想,也许我希望能够取消我的任务......但我不能只是将cancelationToken扔进我假设的缓存中。

是否有一些类似于“假”IDistributedCache 实现的标准方法来解决这个问题,让我为将来的 Redis 实现准备代码。

  services.AddDistributedMemoryCache();
c# caching redis microservices distributed
1个回答
0
投票

您实际上要求的是一个分布式锁,它可以确保某个事物在您的所有服务实例中仅运行一次。

分布式锁定可以使用 Redis 来实现,甚至在这里记录了实现它的示例和库

问题在于,分布式锁定变得越来越复杂,具体取决于您对锁的期望程度。 最简单的锁是在一个 Redis 实例中写入一个密钥,每个实例都会检查该密钥是否存在。 但有许多边缘情况仍然会让多个实例通过,并且您的任务无论如何都会运行多次。

无论如何,我建议使用事件来代替 Azure 服务总线之类的东西,在服务级别上,无需实现任何内容,就可以将事件传递给多个订阅者或仅传递给一个订阅者。 这将为您提供一种更简单的方法,让您 100% 的时间只运行一次。

同样,这取决于您对它仅运行一次的依赖程度以及您正在做什么,无论您是否确实需要这种复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.