无法运行Akka工作拉取Java示例,求提供启动主方法样例
Akka工作拉取(Work Pull)示例可执行主方法实现
以下是适配目标示例的可运行主方法,包含完整启动逻辑:
import akka.actor.typed.ActorSystem; import akka.actor.typed.Behavior; import akka.actor.typed.javadsl.Behaviors; import akka.cluster.sharding.typed.javadsl.ClusterSharding; import akka.cluster.sharding.typed.javadsl.Entity; import akka.cluster.sharding.typed.javadsl.EntityTypeKey; public class WorkPullingExampleMain { public static void main(String[] args) { // 创建Akka集群ActorSystem ActorSystem<Void> system = ActorSystem.create(Behaviors.empty(), "WorkPullingCluster"); // 初始化ClusterSharding组件 ClusterSharding sharding = ClusterSharding.get(system); // 注册ImageConverter实体类型,用于分片管理工作节点 EntityTypeKey<ImageConverter.Command> converterTypeKey = ImageConverter.ENTITY_TYPE_KEY; sharding.init( Entity.of( converterTypeKey, entityContext -> ImageConverter.create(entityContext.getEntityId()))); // 启动工作调度者(生产者:ImageWorkManager) system.systemActorOf(ImageWorkManager.create(sharding), "image-work-manager"); // 模拟启动3个工作节点(消费者:ImageConverter),可按需调整数量 for (int i = 1; i <= 3; i++) { String converterId = "converter-" + i; sharding.entityRefFor(converterTypeKey, converterId).tell(ImageConverter.Start.INSTANCE); } // 添加JVM关闭钩子,优雅终止Akka系统 Runtime.getRuntime().addShutdownHook(new Thread(() -> { system.terminate(); })); } }
关键说明
- 主方法会初始化Akka集群环境,同时启动**生产者(ImageWorkManager)和多个消费者(ImageConverter)**节点
- 依托ClusterSharding实现ImageConverter的分片管理,契合原示例的工作拉取设计逻辑
- 消费者节点数量可通过循环变量调整,模拟多节点协作场景
- 内置关闭钩子,确保程序退出时能优雅终止Akka系统资源
内容的提问来源于stack exchange,提问作者Nandu
相关产品推荐
相关产品推荐

