发出IO(Http)!Http.Bind开始侦听端口并接受连接。但是,Http.Unbind消息不会起相反的作用-端口保持打开状态。也就是说,它得到处理,日志显示:
DEBUG | TcpListener | Unbinding endpoint /0:0:0:0:0:0:0:0:38080
DEBUG | TcpListener | Unbound endpoint /0:0:0:0:0:0:0:0:38080, stopping listener
INFO | HttpListener
我开始用Scala学习Akka。我已经将lib-akka-actor_2.10-2.3.10和typesafe-config-2.10.1导入到我的项目中。
但是,它在运行时会出现异常。
详情:
线程“main”java.lang.NoSuchMethodError中的异常:com.typesafe.config.config.getDuration(Ljava/lang/String;Ljava/util/concurrent/TimeUnit;)J
在akka.util.Helpers$Co
我有一个参与者,在其中我使用context.been更改状态:以下是代码片段:
def stateMachine(state: State): Receive = {
case a => {
... do something
context.become(stateMachine(newState))
}
case b => {
... do something
sender ! state
}
case c => {
标签: Akka
akka-streamreactive-streams
如何使用Source.asSubscriber包装被动侦听器?我不明白它的好处
我正在尝试为WebSocket创建Source[T]。这是我的密码:
def createWsObservable(url: String, onStartAction: Option[WebSocket ⇒ Unit]): Source[WsMessage, KillSwitch] =
Source.asSubscriber[WsMessage].mapMaterializedValue { subs: Sub
我有以下几行:
val c = context.actorSelection("akka://ActorSystem/user/AAA/BBB/*")
c ! MessageNotification(message)
但这一信息似乎没有在任何地方传递
同时,这项工作:
val c = context.actorFor("akka://ActorSystem/user/AAA/BBB/CCC")
c ! MessageNotification(message)
“我的actorSelectio
我正在使用TestKit测试akka系统。我正在测试的系统的一个参与者,在收到特定消息类型时,context.watch会杀死发送者,并在发送者死亡时自杀:
trait Handler extends Actor {
override def receive: Receive = {
case Init => context.watch(sender)
case Terminated => context.stop(self)
}
}
我在测试中具有覆盖actorOf的特性:
trait ActorRefFactory {
this: Actor =>
def actorOf(props: Props) = context.actorOf(props)
}
我还有worker actor,当收到任何消息时,它会停止self:
class WorkerActor extends Actor {
override def receive: Actor.Receive = {
case _ =>
我有一个Actor A,它为每个请求建立并返回员工信息。参与者A需要从另一个参与者B获取更多信息。B反过来从参与者C获取一些信息,而C依赖于参与者D
实现这一点的一种方法是将执行上下文作为请求/响应消息在参与者之间传递。有没有更好的方法来管理上下文?我可以想出两个选择-
1) 只将员工信息传递给下游参与者,让参与者D将其发送回A。我们在每个参与者中不断构建员工信息,就像累加器模式一样。因此,消息流是:A->B->C->D->A
2) 为每个请求创建一个所有参与者的实例。这样,每个步骤的员工信息都
我正在尝试使用Akka构建一个应用程序。
应用程序将有一个主参与者,它将工作分配给n个从属参与者。每个从属角色将作为其下m个从属角色的主角色
也就是说,主参与者将向其下的从属参与者提供任务。每一个奴隶参与者将再次将主人交给它的任务重新分配给它下面的奴隶
因此,中级演员既是奴隶又是主人
我的问题是,这种架构可能吗?
如果是,利弊如何?是。这正是你在阿克卡与演员合作的方式。参与者层次结构是处理工作分配和故障处理的完美方式。为什么要停在三个层次上?制作尽可能多的你认为有用和合乎逻辑的级别。这样,如果一
标签: Akka
akka-clusterakka-persistence
这个问题可能有点模糊,但我不确定如何使它更精确
在使用集群分片扩展时,您必须提供某种持久性日志,以便插件可以存储其元数据(ShardRegionAllocated等)
当新参与者在节点间实例化/移动以从冻结状态恢复时,将使用这些元数据
假设您的日志由于任何原因而损坏(丢失一个条目,复制一个条目,等等)。这会导致参与者启动时出现非常糟糕的异常(持久性恢复失败),如果处理不正确,可能会终止整个区域
管理此场景的最佳方法是什么?(我在征求各个层次的意见,从主管的政策到直接对《华尔街日报》的某种干预)。
我有一个actor系统,目前可以接受命令/消息。这些行动者的状态是持续的,阿卡。我们现在要为这个actor系统构建查询系统。基本上,我们的问题是,我们希望有一种方法来获得这些特定行为者的所有状态的汇总/列表。虽然我不是严格地赞同CQRS模式,但我认为这可能是一种很好的方式
我最初的想法是让一个参与者进行查询,作为其状态的一部分,保存正在进行“数据写入”的其他参与者的状态集合。为了做到这一点,这个参与者将订阅它感兴趣的参与者,这些参与者将只向查询参与者发送它们的状态,当它们经历某种状态变化时。这是
来自akka文件:
与对象不同,参与者不仅封装了它们的状态,还封装了它们的执行。与参与者的通信不是通过方法调用,而是通过传递消息。虽然这种差异看起来很小,但实际上,在并发性和远程通信方面,正是这种差异使我们能够突破OOP的限制
我了解并发性,但不太清楚远程通信。在Akka工具包中,参与者可以封装状态和行为:
An Actor = State + behavior
但是,此状态只能由自身访问或修改。没有其他人可以访问它
与共享状态并发模型一样,线程是基本的执行单元;在Actor中,Aactor是
我只是遵循了akka stream ActorPublisher的示例,有时我会收到以下消息:
java.lang.IllegalStateException:当流
尚未请求元素,totalDemand为0
看看这些文件,他们解释说:
通过调用onNext将元素发送到流。你可以
发送流订阅者请求的尽可能多的元素。
此金额可通过totalDemand查询。它只允许
当isActive和totalDemand>0时使用onNext,否则onNext将
抛出非法状态异常
当流订阅者请求更多元素时
Ac
假设我有两个参与者,A和B,A要求B在10秒的超时时间内做出响应。在此之后,B仍然忙于处理其他消息,这些消息在10秒内无法响应A,因此在actor中出现了get timeout异常
问题是:
1) 在actor A发生异常后,A发送给B的消息是否仍在B的邮箱中等待B处理
2) 如果是,如何防止/检测B的消息过多?答案是肯定的,消息仍然在B的框中。在许多情况下,这是一种常见的关于未来的误解,比如ask模式,在这种模式下,你有一些请求正在进行,由一个在有限时间后超时的未来来表示;大多数人会认为这意味
标签: Akka
akka-streamakka-http
我使用的是akka流,我有一段图形需要有条件地跳过,因为流无法处理某些值。具体地说,我有一个接受字符串并发出http请求的流,但是当字符串为空时,服务器无法处理这种情况。但是我需要返回一个空字符串。有没有一种方法可以做到这一点,而不必通过http请求知道它将失败?我基本上有:
val source = Source("1", "2", "", "3", "4")
val httpRequest: Flow[String, HttpRequest, _]
val httpResponse: Flo
标签: Akka
akka-remote-actor
我的项目包含两个部分-一个是akka服务器,另一个是play框架。两者有时都可以重新启动。为了从akka服务器接收日志,我使用Websocket处理程序
def ws = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
CheckerActor.props(out)
}
使用订阅某个远程参与者上的更改的参与者
class CheckerActor(out: ActorRef) exten
作为Akka的新手,我需要帮助以一种简单的方式理解道具的好处。创建通用OO风格的对象有什么问题
我所知道的是,这遵循工厂模式,您将道具中的类和属性发送到工厂,并为您创建参与者。[如果我错了,请纠正我]
但我看不到这种必要性,我知道这是根本性的。这就是我的困境
你能帮我理解这可能是一个类比/代码吗 我认为这种创造演员的方式有两个好处
第一个很简单:它保证当创建Actor对象时,它也在Actor系统中正确注册(它必须有一个父Actor来监督它,由调度器获取推送消息,等等)。因此,您永远不会得到类型为
查看最新的akka文件,无STM。最新版本似乎不支持Akka STM,为什么?哪个模块代替它?谢谢 几年前,Akka STM被弃用,因为它被认为不适合分布式系统。关于理由,请参见罗兰·库恩关于放弃它的决定
罗兰在他的帖子中提到,但请注意,他们也不赞成
相反,使用演员。除此之外,很难说你不知道你在试图达到什么样的问题/你正在试图解决什么问题。 < P>我想你可以考虑使用过程管理器或传奇设计模式,在流程或saga能够提交或回滚之前,可能会锁定参与者更改其状态这是编码问题吗?我正在研究akka事务处理
在这种情况下:
Data Data;
public ParentActor(Data data)
{
Data = data;
Context.ActorOf(Props.Create(() => new ChildActor()))
}
在儿童演员中使用:
(Context.Parent作为ParentActor).Data;}
还是这违反了阿克卡原则
或者在ChildActor的域中传递数据是正确的方法吗
它是否可能取决于数据是否是可变的?我本人对akka.ne
我正试图向几个演员发送一条信息。调查让我找到了下面的代码,但它不起作用。广播对象中“包装”的消息将消失,而普通字符串将在死信框中结束
有人能告诉我我错过了什么吗?(编辑:我在下面添加了更正)
Router.addRoutee返回一个添加了routee的副本,它不会修改路由器,请参阅:
所以,试着去做吧
router = router.addRoutee(mr1).addRoutee(mr2)
Gach,是的,这是一个Scala API,其中的API更喜欢函数式方法,而不是支持可变对象的老式J
标签: Akka
akka-clustertypesafe-confighocon
我正在使用akka群集,并尝试为不同的环境设置两种不同的配置
一个用于我的本地设置,我将使用种子节点启动我的应用程序
两个用于我的生产Kubernetes设置
我试过在conf文件中提到-Dconfig.resource=/dev.conf和包含应用程序,但它仍然在应用程序.conf中不断要求akka.discovery.method
下面是我的两个配置文件:
application.conf
akka {
log-config-on-start = off
stdout-logl
如何将Akka 2类型的演员的超时时间从默认的5秒更改为5秒
提到超时的TypedProps构造函数是受保护的[TypedProps](我不知道这是什么意思)。TypedProps[Foo]()。带超时(timeout)TypedProps[Foo]()。带超时(timeout)如果要更改已键入演员的默认超时,可以在akka配置中设置akka.actor.typed.timeout值。例如:
akka.actor.typed.timeout=60s
根据定义,这是“具有非void返回类型的类型
我正在创建代表物理设备及其状态的参与者。当设备上线时,我通过向参与者的路径发送和识别消息来“按需”创建它们,如果它还不存在,我就创建一个。可能会有几百万台这样的设备
我担心的是,随着演员数量的增加,身份查找将受到性能影响。这是一个合理的担忧吗
我曾考虑使用路由器策略来分割参与者,但后来我发现,在路径上使用通配符搜索路由器会从每个路由器生成ActorIdentities。我假设一个一致的HashingRouter适合这种情况,但在我进入兔子洞之前,我只想确保我没有过早地进行优化。创建参与者的实体只
我希望有几个参与者(它们表示基于Akka IO部分的TCP连接)。这些参与者应更新通用模型(内存中)。此模型保存在管理此模型的其他参与者中
我的问题是,如何设置此结构?有没有办法告诉阿克卡某个演员只有一个例子
备选方案如下:
我已经有了一个actor,它接受新的TCP/IP连接并将它们传递给新的actor。现在我可以在连接接收器中创建这个“模型管理器角色”,并将这个角色传递给新创建的每个连接角色。但在我看来,这似乎不是一个好方法,因为它将模型管理器与连接接收器联系起来
有人知道适合这种情况的解决
这里是Java/Akka v2.3.9。我的每个Akka UntypedActor子类都能够响应多个通用消息,例如ExecuteOrder66:
假设我有100个不同的actor子类,每个子类都支持ExecuteOrder66。我需要一种方法将这一信息的实例传达给我的每一位演员;就像一个公共广播,每个人都能听到
我想上面的Akka文档链接让我很接近,但我没有看到一个能向我的每个演员发送ExecuteOrder66的链接。有什么想法吗?问题是不太清楚每个人都是谁。如果某个参与者a从远程参与者系统收
我正试着将我的大脑围绕在Akka上,在阅读了2.3.11开发指南之后,我仍然对演员监控有点困惑。我主要关注两个问题:
被监视的参与者死亡或重新启动时发生的消息传递;及
首先,“同侪监督”的必要性或有用性
当我context.watch(someActorRef)时,我对当someActorRef死亡或重新启动时收到的消息感到困惑。我是否收到终止消息或死亡密码异常
对我来说,监控实际上是一种监督形式,因此只有主管/家长演员观看儿童演员才有意义,但我相信API会通过主管策略在幕后自动进行监督。因
Akka HTTP(正式名称为Spray)的一个特性是它能够自动地将json中的数据来回封送和解封送到case类中,等等。我已经成功地使其正常工作
目前,我正在尝试创建一个HTTP客户端,该客户端使用查询参数执行GET请求。当前代码如下所示:
val httpResponse: Future[HttpResponse] =
Http().singleRequest(HttpRequest(
uri = s"""http://${config.getString("http.serve
标签: Akka
reactive-programmingsprayakka-http
目前,我正在尝试在Akka HTTP中实现。我面临的问题是,这种模式在文档中的任何地方都没有记录。似乎没有办法做到以下几点:
IO(Http) ! Http.Bind(serviceActor, "localhost", port = 38080)
如何在不使用Spray的情况下为每个请求使用一个Akka actor?该类有一个可用于此目的的方法bindAndHAndleAsync。此方法接收具有以下签名的函数:
handler: (HttpRequest) ⇒ Future[HttpResp
标签: Akka
akka-clusterakka-remoting
我在Akka集群中有两个节点
我使用以下内容订阅群集的所有ClusterDomainEvent:
cluster.subscribe(
self,
InitialStateAsEvents,
classOf[ClusterDomainEvent])
当两个节点中的一个关闭时,我接收到一个不可访问的事件,并且我开始每隔几秒钟接收一些日志,这些日志警告我如下:
Association with remote system [akka.tcp://application@12
标签: Akka
sprayakka-httpspray-dsl
我有一个使用Spray Custom Directive0的路由处理程序过滤器
此自定义指令的目的是构建一个请求筛选器,以确定请求处理时间
在spray自定义指令中,我可以使用RequestContext的函数withHttpResponseMapped获取参数HttpResponse=>HttpResponse,withHttpResponseMapped将返回一个新的RequestContext对象,如下所示:
def timeRequestInterval: Directive0 = {
标签: Akka
akka-streamakka.net
我有一个演员,他接收天气状况,然后(通过使用OfferAsync)将其推送到源代码。目前,它被设置为为为接收到的每个项目运行(它将其存储到数据库)
公共类StoreConditionsActor:ReceiveActor
{
公共存储条件提供程序(ItemTemperatureDataProvider temperatureDataProvider)
{
var materializer=Context.materializer();
var source=source.Queue(10,Ove
我有一个场景,其中路由包含交替的键/值对段。对的数量未定义,收集这些对的有效方法是什么。例如,路线可能看起来像
/key1/value1/key2/value2/key3/value3
我想要一个与
(key1, value1) -> (key2, value2) -> (key3, value3)
我知道我们可以得到一个路径段列表,并按照上面的方式进行转换。但我要找的是一种能沿着这条路走下去的东西
class EntitiesSpec extends WordSpec with
有时有些库,如R2DBC,返回一个反应流,即Reactor Flux,但在Http层中,我们需要另一个反应流,即AkkaHttp知道的AkkaStreams源,并使用Http客户端创建一个流式场景,用于持续内存处理
在反应流实现之间转换的方式是什么?是否有可用的适配器库?是的,这两个库(Reactor和AkkaStreams)都可以在它们的类型(源、可流动/可观察)和Java 9中提供互操作性的发布者类型之间进行转换。例如
Source.fromPublisher(r2dbc.query().a
标签: Akka
event-sourcingakka-persistence
如果您熟悉Trello,将整个Trello板存储为参与者(使用akka持久性)是一个好的用例吗
trello板由以下部分组成:
列表
列表中的任务
每个任务都可以有注释和其他属性
在决定akka持久性是否是给定问题集的良好用例时,一般的最佳实践或考虑事项是什么
这主要取决于应用程序要执行多少写操作
Akka persistence是一种实现非常高的写入吞吐量的方法,同时确保数据的持久性,即,如果参与者死亡且内存中的数据丢失,则写日志可以持久化到磁盘
如果数据的持久性是必要的,而不需要非常高的
我涉猎了Scala一段时间,从远处研究了Akka,最后我投入了其中。FSM为我敲定了交易。我担心的是,我可能已经想到了如何不适当地共享数据,并且我可能已经错误地想到了事件处理循环以匹配Akka最佳实践
在我的问题中,我有一个中央协调器,负责将传入的任务请求匹配到适当的参与者,这些参与者也是有限状态机。我最初假设onTransition不仅提供州名称,还提供州数据
我想传统的数据封装将是不向侦听器公开数据的原因。但对我来说,我有两个用途让其他人看到这些数据
状态数据包含一个底层域对象,其属性用于根
我试图将一些常见Akka FSM代码的常见测试因素考虑到一个特征中,但是发送方ref正在变成死信。使用此FSM代码:
导入akka.actor.FSM
导入akka.testkit.TestFSMRef
导入akka.testkit.testkit
导入akka.actor.ActorSystem
导入org.scalatest.Matchers
导入org.scalatest.WordSpecLike
导入akka.testkit.ImplicitSender
封闭性状肌醇状态
case对象S
我不知道你用什么来演我的演员。假设iam建立了一个员工管理系统,其中有
1.多个员工
每个人都应该每天来上班
3.将标记他的出席情况和
4.然后将分配任务
我面临的问题是,在我的情况下,什么样的人应该成为一名演员
选项1-
我制作了一个EmployeesActor(注释“s”)——它将接受包含EmployeeId(员工已标记出勤的信息)的EmployeePresentMessage等消息,然后将更新员工系统的状态
选项2-
我创建了一个EmployeeActor类,它将创建10个自身实例(取决于
假设我有一个包含五个参与者的RoundRobinPool路由器,以及一个包含100000个工作项的列表,我需要让这些参与者进行处理
val myrouter: ActorRef =
context.actorOf(RoundRobinPool(5).props(Props[Worker]), "myrouter")
for (a <- mylist)
myrouter ! a
val myrouter:ActorRef=
context.actorOf(RoundRobinPo
我正在开发一个应用程序,它在单个不变的数据结构上进行大量的数字运算。(一组非常大的数组——本质上是一个大矩阵。假设一个典型的大小是200列乘以100000行的双精度数组。)很多计算可以以不同的方式并行,我想利用Akka actor模型来解决这个问题
我担心必须在消息中传递此矩阵(或其部分),因为我认为这将涉及大量的复制和序列化
我是不是想得太多了?(也就是说,如果主管参与者将此矩阵的一些数组传递给其下属,Akka运行时是否足够聪明,可以将其作为引用传递(假设它们保持在同一JVM上),而不是将所有
在第一条记录被读取后,我经历了AkkaSystem的提前终止,在没有执行所有记录的任务的情况下进入死信状态
我的文件中有10条记录,其中2条记录具有要推送到s3的匹配文件名
这里可能出了什么问题。请建议
Sample file record:
xxxxx,ABC,2019-05-10 00:11:00
yyyyyy,XYZ,2019-05-10 00:41:00
导入akka.actor.{actor,ActorSystem,Props}
导入scala.io.Source
导入scala.s
标签: Akka
akka-clusterakka-persistenceakka-typed
我目前正在考虑让两个不同的角色相互交流。特别是:
Given an Actor A exists
When an Actor B is spawned
Then Actor B must have a reference to Actor A
And Actor B must be able to continuously send messages to Actor A even after relocation
我知道有两种选择:
// With an EntityRef
val coun
标签: Akka
playframework-2.1
我已经将akka 2.1子项目包含到我的play项目中。但是,日志现在已停止显示在application.log中
我正在使用基本机制记录akka
私有LoggingAdapter log=Logging.getLogger(getContext().system(),this)
为了将这些日志与我的play应用程序日志包括在一起,应该在什么地方进行配置更改?在play 2.1.1中,Akka日志级别似乎从INFO更改为WARNING
通过在conf/application.conf文件中添加p
在Akka中,我尝试使用pipeTo,而不是在使用?创建的未来响应中使用onComplete,因为这应该是首选模式。然而,当未来的日子一去不复返时,我似乎没有收到任何抛弃或失败的消息。如果使用pipeTo时发生超时,我希望在我的actor中收到什么?当抛出不同的异常时会发生什么情况?示例代码:
class Simple(otherActor : ActorRef) extends Actor{
def receive = {
case "some_msg" => {
我在集群中有一个Actor系统,它有一个filecollector和一个DecoderActor。它在单机上运行良好,并提供了预期的性能。现在,我想通过在两台服务器上运行相同的程序来测试可伸缩性
如何运行actors以便使用两个cpu?是否需要在两台服务器上创建一个Supervisor-actor,然后启动actor集群
如何定义具有不同IP的种子节点
如果你认为这个问题含糊不清,请告诉我一个文件(在akka文件上找不到答案),或者举个例子,或者问一个澄清问题
谢谢
-萨凯特
我正在Play2.2.2中编写一个web应用程序,在用户更新某些状态后,我需要执行一些额外的昂贵处理。我希望以异步方式安排此处理,以免阻塞用户。一个选项是将工作项放入阻塞队列,并让工作线程从中获取项。但是,如果应用程序崩溃,我会丢失挂起的项目
Akka适合这个问题吗?已经很晚了,但我可以看到这个问题没有得到回答。
我在研究Akka持久性时发现了以下链接。
看看它,并张贴任何有用的答案,你可能已经找到
你可以看看@SergiyPrydatchenko——谢谢,我确实看到了那个页面,但我还不清楚
标签: Akka
connection-poolingactorslickbatch-insert
我正在读取巨大的文件,并使用slick和akka actor将记录插入MySql表中。我的方法是-
多个参与者读取文件,单个db参与者将记录插入表中。在这里,我使用批插入光滑。(隐式会议)
我可以使用连接池fpr this和多个db参与者在表中插入记录吗。每个参与者将插入一条记录。(无批量插入)
那么,做这件事的有效方法是什么
谢谢..对于单个DB参与者,您可能会遇到瓶颈,因为参与者一次只能处理一条消息。我会使用路由器(SmallestMailbox/平衡)和一个参与者池(分离写入和读取)。每个
标签: Akka
observer-pattern
在经典编程中,我使用obeserver模式来通知观察者更改
阿卡语中的等效模式是什么
用例:
参与者(PropertyServiceActor)正在从数据库读取和缓存属性
不同的参与者可以注册到PropertyServiceActor
如果属性发生更改,PropertyServiceActor将通知已注册的参与者该更改
看一看
要通知所有观察者,只需向观察者发送消息即可。您还可以通过发送akka.routing.AddRoutee和akka.routing.RemoveRoutee来添加和删除
我有以下测试用例:
class MutableStateActorTest extends TestKit(ActorSystem("MutableStateActorTest")) with WordSpecLike with Matchers {
"A MutableStateActor" must {
val actRef = TestActorRef[MutableStateActor]
"mutate state in order" in {
1
我有一个需要3个节点的Akka群集:
cluster {
seed-nodes = [
"akka.tcp://ClusterSystem@127.0.0.1:2551"
,"akka.tcp://ClusterSystem@127.0.0.1:2552"]
min-nr-of-members = 3
}
然后我使用集群单例启动一个actor,启动一个集群感知路由器:
deployment {
/parent/singleton/rou
上一页 1 2 ...
15 16 17 18 19 20 21 ...
下一页 最后一页 共 24 页