如何在单个服务中托管多个 Service Fabric Actor 类型?

2024-01-07

我读了here https://azure.microsoft.com/en-gb/documentation/articles/service-fabric-reliable-actors-platform/应该可以在同一服务中托管紧密耦合的 ActorType,但我似乎找不到任何有关具体操作方法的文档。

我认为我可能需要创建自己的 ActorService 实例并将上下文传递给它,但我认为无法从文档中找到正确的 API。

有人可以分享一个例子吗?


有点像但不是真的。您可以在同一个角色中拥有多种演员类型应用。看起来它们在 Visual Studio 中位于同一个服务中,但实际上它们是作为单独的服务部署的。如果你愿意的话,请耐心等待我一分钟。

所以你可以像这样注册多个演员:

internal static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<Actor1>().GetAwaiter().GetResult();
        ActorRuntime.RegisterActorAsync<Actor2>().GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}

太好了,我有多种演员类型。这行得通,你就可以这样做。

但你想知道how有用!嗯,这只是一个简化版本:

internal static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<Actor1>(
            (context, actorType) => new ActorService(context, actorType, () => new Actor1())).GetAwaiter().GetResult();

        ActorRuntime.RegisterActorAsync<Actor2>(
            (context, actorType) => new ActorService(context, actorType, () => new Actor2())).GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}

这更能说明实际发生的情况,因为你在这里看到我现在有两项服务。发生什么了?

秘密就在 ActorRuntime 中。它比 ServiceRuntime(您通常在其中注册 Reliable Services)多做一些工作。 Actor 框架构建过程会为您执行一些魔法,在您的应用程序内配置服务类型和默认服务实例对于每种演员类型。您可以在 ApplicationManifest.xml 中看到这一点,其中构建工具为您设置默认服务:

<DefaultServices>
  <Service Name="Actor1ActorService" GeneratedIdRef="3262c188-3eee-44c5-9d1e-d2c2a2685f89|Persisted">
     <StatefulService ServiceTypeName="Actor1ActorServiceType" TargetReplicaSetSize="[Actor1ActorService_TargetReplicaSetSize]" MinReplicaSetSize="[Actor1ActorService_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Actor1ActorService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
     </StatefulService>
  </Service>
  <Service Name="Actor2ActorService" GeneratedIdRef="1bc66d2c-0479-4bb2-a9aa-3254030506f1|Persisted">
     <StatefulService ServiceTypeName="Actor2ActorServiceType" TargetReplicaSetSize="[Actor2ActorService_TargetReplicaSetSize]" MinReplicaSetSize="[Actor2ActorService_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Actor2ActorService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
     </StatefulService>
  </Service>

例如,如果我采用上面定义的两种参与者类型并部署该应用程序,则结果如下:

这些实际上是应用程序中单独的服务实例,每个实例都有不同的服务类型,所有这些都是自动为您生成的:

当然,因为它们是不同的服务实例,所以它们将像您通常期望的那样分布在集群中:

我会去更新那个文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在单个服务中托管多个 Service Fabric Actor 类型? 的相关文章

  • Scala 中的 Akka,感叹号和问号

    感叹号 和 有什么区别 和问号 向 Actor 发送消息时 myActor Hello value1 myActor Hello value1 无耻抄袭 惊人的 官方文档 http doc akka io docs akka 2 4 1 s
  • Akka Actor - 等待一段时间等待消息,否则发送消息

    是否有可能制作一个Actor等待 X 秒来接收任何消息 如果收到消息 则照常处理它 否则将消息发送给其他人Actor 在构造函数中预先确定 有可能 看看Akka Actor 询问 和 等待 带有 TimeoutException https
  • 如何访问Azure Service Fabric有状态/无状态服务中的settings.xml?

    如何访问和读取中定义的参数PackageRoot Settings Settings xml来自我的有状态 无状态服务代码的文件 例如 我有一个带有参数 EndpointUrl 的 DocumentDbConfig 部分 section s
  • 将 Post 或 PostAndAsyncReply 与 F# 的 MailboxProcessor 一起使用吗?

    我见过不同的片段展示了Put返回的消息unit与 F 的MailboxProcessor 在某些情况下 仅Post方法被使用而其他人使用PostAndAsyncReply 一旦消息被处理 回复通道立即回复 在进行一些测试时 我发现等待回复时
  • Akka actor 查找或依赖注入

    我刚刚开始使用 Akka 我无法决定是否应该使用依赖注入 如蛋糕模式 或 actor 查找来将 actor 彼此解耦 首选方法是什么 您应该更喜欢向彼此介绍 Actor 这意味着在消息中发送 ActorRef 或与消息一起发送 或者将其传递
  • Scala Actors:如果 React 永远不会返回,为什么它需要循环{},为什么 while(true) 不起作用?

    刚刚开始使用 Scala Actors 这斯卡拉网站 http www scala lang org node 242 says 可以通过使用来避免线程阻塞操作react等待 新消息 基于事件的挂件receive 然而 有一个 通常很小 支
  • 我应该使用 Java 中的哪个线程池?

    有大量的任务 每个任务都属于一个组 要求是每组任务应该像在单线程中执行一样串行执行 并且在多核 或多CPU 环境中吞吐量应该最大化 注意 组的数量也与任务数量成正比 最简单的解决方案是使用 ThreadPoolExecutor 并同步 或锁
  • 如何将 Azure 管道变量传递到 AzureResourceManagerTemplateDeployment@3 任务使用的 ARM 模板?

    我尝试在每天晚上安排的 Azure 管道中执行以下 2 个步骤 将自签名证书放入密钥库 通过 ARM 模板部署 Service Fabric 集群 并使用证书指纹和秘密 ID 作为参数 在密钥库中创建证书的第一步对我来说效果很好 impor
  • RemoteActor 取消注册 actor

    我正在玩 RemoteActors 现在我想知道 如果我关闭 RemoteActor 会发生什么 该 Actor 可通过 RemoteActor alive 和 RemoteActor register 来使用 我找不到两者的逆 活着和注册
  • 无法反序列化 ActorRef 以将结果发送到不同的 Actor

    我开始使用 Spark Streaming 来处理我收到的实时数据源 我的场景是 我有一个使用 with ActorHelper 的 Akka actor 接收器 然后我让 Spark 作业执行一些映射和转换 然后我想将结果发送给另一个 a
  • EventGrid 与 EventHub

    我正在开发一个服务结构应用程序 想要从此应用程序发布一些事件 并在另一个应用程序中订阅或处理这些发布事件 我尝试过 EventGrid 概念 并观察到发布和处理事件时存在延迟 所以 现在我正在寻找其他替代方案 例如 EventHub 或队列
  • Service Fabric 重启应用程序

    我有一个在启动时从 KeyVault 读取的服务结构应用程序 当我们更改 KeyVault 值时 我们必须重新启动节点才能读取新值 这会导致同一节点上的其他应用程序出现故障 我正在尝试编写一个 PowerShell 脚本来重新启动服务结构应
  • Azure Service Fabric 节点、节点类型、实例和规模集

    在尝试了几天Azure的Service Fabric之后 我仍然对以下四个关键词感到不舒服 实例 节点 节点类型 规模设定 他们的意思是什么 有什么区别 Instance 取决于上下文 它可能意味着虚拟机 服务实例等 Node 集群内的节点
  • 为什么参与者“询问”模式被视为反模式或“代码味道”?

    据我所知 询问 模式被认为是一种不好的做法 应该避免 相反 推荐的模式是 每个请求的参与者 模型 然而 这对我来说没有意义 因为 询问 模式正是这样做的 它为每个请求创建一个轻量级参与者 那么为什么这被认为是不好的 特别是当 future
  • Fabric 消息太大

    我试图将 5MB 数据从服务传递给参与者 但收到错误 Fabric 消息太大 如何增加微服务之间可传输的最大大小 我看了以下内容page https github com Azure azure content blob master ar
  • Service Fabric:删除了参与者,现在升级失败

    我正在尝试混合使用有状态和无状态参与者来升级 Service Fabric 应用程序 我做了一些重构 因此删除了一些我不再需要的演员 现在 当我尝试升级应用程序时 出现以下错误 在删除服务类型之前 必须显式删除服务 经过一番思考后 我thi
  • 使用Azure Service Fabric的默认客户端时如何向请求添加消息头?

    我想知道是否可以将自定义消息头注入到传出请求中以携带附加信息 而无需反序列化有效负载来完成身份验证 验证或请求关联等功能 例如通过消息检查器提供的 wcf Update 使用 SDK v2 您现在可以 相对 轻松地修改 Reliable S
  • ServiceFabric 本地集群中的 HTTPS 通信

    这是我的设置 IdentityServer 4 作为无状态可靠的 ASP NET Core 服务 WebAPI 作为可靠的 ASP NET Core 服务 将它们与 JS 客户端一起使用 现在可以与 HTTP 一起使用 问题出在 HTTPS
  • Scala:为什么 Actor 是轻量级的?

    是什么让演员如此轻盈 我什至不确定它们是如何工作的 它们不是单独的线程吗 当他们说轻量级时 他们的意思是每个参与者都没有映射到单个线程 JVM 提供共享内存线程 锁作为主要形式 并发抽象 但分享了 内存线程是相当重量级的 并招致严重的绩效处
  • 如何识别远程参与者?

    我有一个远程参与者 客户端 它正在向另一个远程参与者 服务器 注册 然后注销 使用关闭挂钩 然而 虽然服务器接收到注销 但实际sender财产是一个不同的 Channel 对象 所以在我的服务器日志中我有 Registered new cl

随机推荐