当前位置: 首页 > news >正文

Spring Boot集成Akka remoting快速入门Demo

1.什么是Akka remoting?

Akka-Remoting一种ActorSystem之间Actor对Actor点对点的沟通协议.通过Akka-Remoting来实现一个ActorSystem中的一个Actor与另一个ActorSystem中的另一个Actor之间的沟通

Akka Remoting限制:

  • 不支持NAT(Network Address Translation)
  • 不支持负载均衡器(Load Balancers)

Akka提供了种方式来使用Remoting功能:

  • 通过调用actorSelection方法搜索一个actor,该方法输入的参数的模式为:akka.<protocol>://<actor system>@<hostname>:<port>/<actor path>
  • 通过actorOf方法创建一个actor

下面看一下Remoting系统中故障恢复模型(Failure Recovery Model),如下图所示:

akka-remoting

上图中,连接到一个远程系统的过程中,包括上面4种状态:在进行任何通信之前,系统处于Idle状态;当第一次一个消息尝试向远程系统发送,或者当远程系统连接过来,这时系统状态变为Active;当两个系统通信失败,连接丢失,这时系统变为Gated状态;当系统通信过程中,由于参与通信的系统的状态不一致导致系统无法恢复,这时远程系统变为Quarantined状态,只有重新启动系统才能恢复,重启后系统变为Active状态。

Akka Remoting功能:

Akkaremoting完全配置化了,使用时几乎只需要修改配置文件,除非自定义,否则不需要动一行代码。 remoting包提供了两个功能:

  • 查找一个已存在的远程Actor
  • 在指定的远程路径上创建一个远程Actor

2.代码管理

实验目标

实现客户端和服务端通信

pom.xml

<!-- Akka Streams -->
<dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-stream_2.13</artifactId><version>2.6.0</version>
</dependency>

server

server.conf

akka {actor {provider = "akka.remote.RemoteActorRefProvider"}remote {artery {enabled = ontransport = tcpcanonical.hostname = "127.0.0.1"canonical.port = 2552}}
}
package com.et.akka.remoting;import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.typesafe.config.ConfigFactory;public class ServerApp {static class ServerActor extends AbstractActor {@Overridepublic Receive createReceive() {return receiveBuilder().match(String.class, msg -> {System.out.println("Server received message: " + msg);getSender().tell("Hello from Server", getSelf());}).build();}}public static void main(String[] args) {ActorSystem system = ActorSystem.create("RemoteSystem", ConfigFactory.load("server"));ActorRef serverActor = system.actorOf(Props.create(ServerActor.class), "serverActor");System.out.println("Server is running...");}
}

client

client.conf

akka {actor {provider = "akka.remote.RemoteActorRefProvider"}remote {artery {enabled = ontransport = tcpcanonical.hostname = "127.0.0.1"canonical.port = 0}}
}
package com.et.akka.remoting;import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.typesafe.config.ConfigFactory;public class ClientApp {static class ClientActor extends AbstractActor {private final String serverActorPath;public ClientActor(String serverActorPath) {this.serverActorPath = serverActorPath;}@Overridepublic void preStart() {ActorSelection serverActor = getContext().actorSelection(serverActorPath);serverActor.tell("Hello from Client", getSelf());}@Overridepublic Receive createReceive() {return receiveBuilder().match(String.class, msg -> {System.out.println("Client received message: " + msg);}).build();}}public static void main(String[] args) {ActorSystem system = ActorSystem.create("RemoteSystem", ConfigFactory.load("client"));String serverPath = "akka://RemoteSystem@127.0.0.1:2552/user/serverActor";ActorRef clientActor = system.actorOf(Props.create(ClientActor.class, serverPath), "clientActor");System.out.println("Client is running...");}
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.(akka)

3.测试

  1. 启动server
  2. 启动client
  3. 产看日志

server

Server is running...
Server received message: Hello from Client

client

Client is running...
Client received message: Hello from Server

4.引用

  • https://doc.akka.io/docs/akka/current/remoting.html
  • https://doc.akka.io/docs/akka/current/remoting-artery.html#selecting-a-transport
  • Spring Boot集成Akka remoting快速入门Demo | Harries Blog™

相关文章:

Spring Boot集成Akka remoting快速入门Demo

1.什么是Akka remoting&#xff1f; Akka-Remoting一种ActorSystem之间Actor对Actor点对点的沟通协议.通过Akka-Remoting来实现一个ActorSystem中的一个Actor与另一个ActorSystem中的另一个Actor之间的沟通 Akka Remoting限制&#xff1a; 不支持NAT&#xff08;Network Add…...

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤* 1)减少使用全局变量和大对象&#xff1b; 2)调整新生代的大小到最合适&#xff1b; 3)设置老年代的大小为最合适&#xff1b; 4)选择合适的GC收集器&#xff1b; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1…...

文件格式转换:EXCEL和CSV文件格式互相转换

目录 1.EXCEl和CSV文件格式互相转换1.1首先安装所需的Python包1.2excel转换为csv代码如下:1.3csv转换为excel代码如下:由于excel文件在数学建模数据处理当中的局限性,我们通常把excel文件转换为csv文件来处理,下面是相关的代码,我直接封装成函数,你们直接调用即可,我会添…...

基于协同过滤的北京森林公园推荐---附源码74454

摘要 本论文主要论述了如何基于协同过滤开发一个北京森林公园推荐&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;通过爬虫技术对北京森林公园的景点信息数据进行爬取&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述北京森…...

002 JavaClent操作RabbitMQ

Java Client操作RabbitMQ 文章目录 Java Client操作RabbitMQ1.pom依赖2.连接工具类3.简单模式4.工作队列模式&#xff08;work&#xff09;公平调度示例 5.发布/订阅模式&#xff08;fanout&#xff09;交换机绑定示例代码 6.路由模式&#xff08;direct&#xff09;7.Topic匹配…...

lablelme标注的数据转成YOLO v8 格式

1 labelme 转 yolov8 格式 import json import cv2 import numpy as np import os def json2yolo(path):# dic{N_shaoxi:0, N_qiaoqi:1, N_qiaojie:2, N_pianyi:3, N_yiwu: 4, \# NV_shaoxi: 5, NV_qiaoqi: 6, NV_qiaojie: 7, NV_pianyi: 8, NV_yiwu: 9,\# …...

【linux】cat 命令

cat 命令是 Linux 和 Unix 系统中非常基础且常用的一个命令&#xff0c;它的全称是 "concatenate" 的缩写&#xff0c;意为“连接”或“串联”。尽管名字听起来像是专门用于连接文件的&#xff0c;但 cat 命令的用途远不止于此。它主要用于查看、创建、合并文件内容&…...

速通sass基础语法

速通Sass语法&#xff1a; sass的特点&#xff1a; 由于css的缺陷&#xff1a;无法自定义变量&#xff0c;不可引用&#xff0c;嵌套等。sass/scss/less等css预处理器产生。以sass为例&#xff0c;引入了变量、嵌套、运算、混入(Mixin)、继承、颜色处理、函数等诸多功能。方便…...

Vue: watch5种监听情况

目录 一.watch的性质与作用 1.watch 的性质包括&#xff1a; 2.watch 常用于以下场景&#xff1a; 二.监视ref定义的基本类型数据 三.监视ref定义的对象类型数据 四.监视reactive定义的对象类型数据 五.监视ref或reactive定义的对象类型数据中的某个属性 六.监视上述的…...

Android 车联网——汽车系统介绍(附2)

汽车系统指的是由多个模块或组件组成的系统,如发动机系统、制动系统、空调系统等,这些系统通常由多个 ECU 协同工作来完成特定的任务。 一、汽车系统 1、防抱死制动系统 ABS(Anti-lock Braking System,防抱死制动系统)是一项重要的汽车安全技术,其主要功能是在车辆紧急…...

C++ 链表

基本用法 C++提供了list容器,这是一个双向链表,能高效进行数据添加和删除。 引入头文件 #include <iostream> #include <list> // 引入list头文件 using namespace std;创建和初始化 list...

中国初创公司数量下降了98%

近年来&#xff0c;中国风险投资市场的风云变幻&#xff0c;通过IT Juzi&#xff08;IT桔子&#xff09;等权威数据服务提供商的透镜&#xff0c;得以清晰展现。数据显示&#xff0c;自2018年的鼎盛时期——拥有51,302家初创公司以来&#xff0c;这一数字在短短五年内急剧下降至…...

【SSRF漏洞】——http协议常见绕过

改变的确很难&#xff0c;但结果值得冒险 本文如有错误之处&#xff0c;还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标…...

[网络][CISCO]CISCO_华为网络设备端口镜像配置

CISCO 华为网络设备端口镜像配置大全 isco交换机通常支持2组镜像&#xff0c;4000系列有支持6组镜象的。支持所全端口镜像。 Cisco catylist2820 有2个菜单选项 先进入menu选项&#xff0c;enable port monitor 进入cli模式&#xff0c; en conf term interface fast0/…...

第二十五章 添加数字签名

文章目录 第二十五章 添加数字签名数字签名概述添加数字签名 第二十五章 添加数字签名 本主题介绍如何向 IRIS Web 服务和 Web 客户端发送的 SOAP 消息添加数字签名。 通常&#xff0c;会同时执行加密和签名。为简单起见&#xff0c;本主题仅介绍签名。有关结合加密和签名的信…...

GHOST重装后DEF盘数据救援指南

一、现象解析&#xff1a;GHOST重装后的DEF盘失踪之谜 在计算机维护的日常中&#xff0c;GHOST重装因其快速便捷的特点&#xff0c;成为众多用户解决系统问题的首选方法。然而&#xff0c;这一操作虽能迅速恢复系统至初始状态&#xff0c;却也暗藏风险&#xff0c;尤其是当不慎…...

使用blender快速制作metahuman面部以及身体绑定教程

【metablriger教程】使用blender一键绑定自定义角色metahuman绑定并导入UE5引擎教程_哔哩哔哩_bilibili 目前市面上的制作metahuman绑定的工具大多是maya的&#xff0c;metablriger是一个帮助用户快速制作metahuman绑定的blender插件&#xff0c;可以平替市面上已有的metahuma…...

OpenHarmony鸿蒙( Beta5.0)智能窗户通风设备开发详解

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…...

pandas 将多条记录整合成一条记录,每条记录的year和month字段组成新的字段名

你可以使用 Pandas 的 pivot_table() 或 groupby() 方法&#xff0c;将多条记录整合成一条&#xff0c;并通过 year 和 month 这两个字段生成新的字段名。具体的实现方法是通过 pivot_table() 将 year 和 month 作为列标签&#xff0c;将其他列中的数据进行整合。 假设你的数据…...

C# 中的多线程同步:原子变量、原子操作、内存顺序和可见性

C# 中的多线程同步&#xff1a;原子变量、原子操作、内存顺序和可见性 引言 随着现代计算机系统的发展&#xff0c;多核处理器已经变得非常普遍。在这种环境下&#xff0c;多线程编程成为提高应用程序性能的关键技术之一。然而&#xff0c;多线程编程带来了新的挑战&#xff…...

API平台选型指南:从RapidAPI、聚合数据到幂简集成的实战考量

1. 为什么API平台选型如此重要&#xff1f; 想象一下你正在开发一款智能天气应用&#xff0c;需要接入实时气象数据、空气质量指数和灾害预警接口。如果每个API都要单独注册账号、申请密钥、阅读不同风格的文档&#xff0c;光是集成工作就可能耗掉两周时间。这就是为什么选择一…...

终极指南:如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案

终极指南&#xff1a;如何在PC上免费畅玩Switch游戏 - Ryujinx模拟器完整解决方案 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾经梦想在电脑上体验《塞尔达传说&#xff1a…...

如何彻底解决Cursor API限制问题:从免费到Pro的完整指南

如何彻底解决Cursor API限制问题&#xff1a;从免费到Pro的完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your t…...

Phi-4-reasoning-vision-15B高算力适配:双GPU显存占用监控与低并发稳定性验证

Phi-4-reasoning-vision-15B高算力适配&#xff1a;双GPU显存占用监控与低并发稳定性验证 1. 模型概述与技术背景 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型&#xff0c;专为复杂视觉理解任务设计。作为2026年发布的重要模型&#xff0c;它在图像理解、文档…...

AI写的论文如何降到20%以内?分场景教程+工具对比

AI写的论文如何降到20%以内&#xff1f;分场景教程工具对比 “我用DeepSeek写了大半篇论文&#xff0c;导师要求知网AI率必须低于20%&#xff0c;现在已经是52%&#xff0c;我该怎么办&#xff1f;” 这是毕业季最典型的求助问题之一。 不同的情况&#xff0c;处理方法不一样。…...

PCL2-CE社区版启动器:终极指南打造个性化Minecraft游戏中心

PCL2-CE社区版启动器&#xff1a;终极指南打造个性化Minecraft游戏中心 【免费下载链接】PCL-CE PCL2 社区版&#xff0c;可体验上游暂未合并的功能 项目地址: https://gitcode.com/gh_mirrors/pc/PCL-CE PCL2-CE社区版启动器是一款功能强大的开源Minecraft启动工具&…...

DAMO-YOLO赛博朋克UI实战:CSS3神经突触动画+玻璃拟态设计解析

DAMO-YOLO赛博朋克UI实战&#xff1a;CSS3神经突触动画玻璃拟态设计解析 今天&#xff0c;我们来聊聊如何把一个顶级的AI视觉引擎&#xff0c;包装成一个让人看一眼就忘不掉的“赛博朋克控制台”。你可能会好奇&#xff0c;一个目标检测系统&#xff0c;界面做得再酷有什么用&…...

保姆级教程:深求·墨鉴Podman部署全流程,小白也能轻松搞定

保姆级教程&#xff1a;深求墨鉴Podman部署全流程&#xff0c;小白也能轻松搞定 1. 为什么选择Podman部署深求墨鉴&#xff1f; 传统Docker部署方式虽然常见&#xff0c;但对于深求墨鉴这样的轻量级OCR工具来说&#xff0c;Podman提供了更优雅的解决方案。Podman是一款无需守…...

ChatGPT、Claude、Gemini大模型实战对比:哪个更适合你的业务场景?

ChatGPT、Claude、Gemini大模型实战对比&#xff1a;哪个更适合你的业务场景&#xff1f; 当企业面临AI大模型选型时&#xff0c;往往陷入技术参数的海洋却难以找到业务适配的答案。本文将从真实业务需求出发&#xff0c;通过客服对话、内容创作、数据分析三个典型场景的实测数…...

前端开发者必看:5个提升AI提示词效果的实战技巧(附代码示例)

前端开发者必看&#xff1a;5个提升AI提示词效果的实战技巧&#xff08;附代码示例&#xff09; 当ChatGPT帮你生成React组件却总跑偏&#xff0c;当Copilot给出的代码建议总差那么点意思——作为前端开发者&#xff0c;你可能已经意识到&#xff1a;AI工具的表现力&#xff0c…...