我们有一个带有Microsoft Azure Service Fabric Micro服务的ASP.NET应用程序。 SQL Server数据库中有一个事件表,用于存储事件以及执行事件的相应时间。
我们有另一个Microsoft Azure Reliable Actor Service,它每10分钟定期调用一个Micro Services中的API,以读取计划在接下来10分钟内安排的事件。
因此,在第一次调用中,它将读取事件直到特定时间。在下一个调用中,我们需要读取上次调用结束读取的位置。也就是说,我们需要为后续读取保留每次读取的结束时间。
为了做到这一点,我们在API中使用了一个静态变量来存储每次读取的结束时间。在下一次读取中,我们从此静态变量中检索值,并将其用作读取的开始时间。即每次读取时,此变量将具有上次读取的结束时间。
当我们在本地运行时,这非常有效。但是在部署微服务之后,变量开始返回不正确的值。它将在大多数时间返回正确的值,但有时(如10次读取中的1次),它将返回从5或6次回调中存储的值。
我听说这可能是因为IIS Express有多个工作进程,每个进程可能有不同的静态变量副本。如果是这种情况,我该如何避免这种情况并实现预期的行为呢?如果没有,可能是什么原因和解决方案呢?
请注意,此变量适用于整个应用程序,而不是特定于用户会话。我希望只要微服务正在运行就保留变量值。