Azure 诊断有状态的参与者

Azure 诊断有状态的参与者,azure,actor,azure-service-fabric,stateful,Azure,Actor,Azure Service Fabric,Stateful,我仍在努力让自己的头脑清醒过来。因此,我(当前)的问题最好放在这样一个例子中: 我有一个服务台系统,每张票都是有状态的演员。参与者知道它所处的状态(发布、处理、拒绝等),可以访问相关数据以及所有这些 我发现我犯了一个错误,那五万张票中有一堆是在错误的状态。所以,我需要 修正代码 发布解决方案 修复这些50000参与者的子集的数据内容 现在,我如何查询这些参与者的状态,比如“给我每一个处于“拒绝”状态并且属于名称以德语ümlaut开头的用户的参与者”?然后我如何修补这些参与者的状态数据 我

我仍在努力让自己的头脑清醒过来。因此,我(当前)的问题最好放在这样一个例子中:

  • 我有一个服务台系统,每张票都是有状态的演员。参与者知道它所处的状态(发布、处理、拒绝等),可以访问相关数据以及所有这些
  • 我发现我犯了一个错误,那五万张票中有一堆是在错误的状态。所以,我需要
    • 修正代码
    • 发布解决方案
    • 修复这些50000参与者的子集的数据内容
现在,我如何查询这些参与者的状态,比如“给我每一个处于“拒绝”状态并且属于名称以德语ümlaut开头的用户的参与者”?然后我如何修补这些参与者的状态数据


我真的必须为每个参与者添加一个查询方法并唤醒每个参与者吗?或者有没有办法去查询那些坐在上面的演员之外的状态字典?

也许你可以考虑在Actudio类(ES)中重写OnActuaTaseCyc,然后在那里实现清理逻辑,然后升级你的SF应用程序?

这将避免需要在外部迭代每个实例(因为SF运行时将为您调用OnActivateAsync),并将确保仅在需要时(仅在给定实例的下一次激活时)为每个实例运行逻辑


祝你好运

简单的回答是肯定的,在这种情况下,你必须唤醒每一个演员(最终)

如果你已经处于那种状态,我认为JoshL的建议是有道理的

为了避免这种情况,您可以在有状态服务中保留一个索引字典,保存您想要查询的信息,例如参与者id和状态(已发布、已处理等)。然后你只需要唤醒那些相关的演员

为此,您可以采取两种方法:

  • 让有状态服务指导信息流-负责更新索引字典并告诉参与者要做什么(例如更改状态)
  • 让参与者负责通知有状态服务进行状态更新(例如,可以通过提醒定期完成)
我想这是关于服务织物的?是的。这里的人:我对fabric知之甚少,无法帮助你了解fabric,但我建议你看看这个博客,它是一个MVP,有很多关于fabric和azure的帖子,我从这里开始学习你知道,所有这些与我使用基于非规范SQL的解决方案所能做到的轻松程度相差甚远:进行选择以解决问题的扩展,编写更新脚本并在一个原子事务中修复它,在部署新的参与者代码时运行脚本。不能说我对此感到高兴。我的意思是,演员们都很相似,都很好,但修理东西是现实生活中的一种情况,他们显然失败了-(@Volker我自己也很奇怪。作为一名开发人员,我知道如果我以某种方式破坏了一切,至少我仍然拥有数据,这让我感到有些安慰。对于Actors,数据就像遍布在小对象中,我只能通过工作系统访问。我仍然在学习Azure Fabric,但我希望我能了解一些知识关于解决这一问题的最佳实践。很好的观点。如果有状态的参与者在激活时死亡,其状态会发生什么变化?我只希望它不会被删除…因此,基本上,在产品的生命周期内(可能是很多年)actors将获得补丁逻辑和版本检查的大尾巴。不能说我对此感到兴奋。我开始怀疑a)访问actors后面的表存储还是b)使用sql server作为存储提供程序。或者完全变成无状态。我认为支持自定义状态提供程序,所以这可能是一个选项。。。虽然可能是个复杂的问题。请记住,有状态参与者的一大卖点是将状态更改自动复制到集群中的所有节点。这不太可能是a)轻松构建自己或b)轻松在自定义提供程序中实现的。当然,你不需要它,那么也许无状态是你最好的选择。