我正在尝试测试我的Akka.NETactors,但在使用TestKit和理解它的工作原理时遇到了一些问题。由于Akka.NET中还没有关于单元测试的官方文档,我已经探索了Akka.NET存储库以获取示例代码,但那里使用的示例对我不起作用。我引用的测试是ReceiveActorTests.cs和ReceiveActorTests_Become.cs,因为这些与我尝试在我的应用中测试的场景很接近。这是一些伪代码:给定这个ActorpublicclassGreeter:ReceiveActor{publicGreeter(){NotGreeted();}privatevoidNotGreet
我有一个actorFooActor,它通过Props来实例化几个BarActor并发送BarMessage给它。代码有效,但我很难为它编写测试。添加的限制是我只能在此应用程序中使用Java代码,不能使用Scala代码。经过几次尝试,这似乎是我迄今为止最大的努力:@TestpublicvoidtestJavaTestKit(){newJavaTestKit(system){{JavaTestKitprobe=newJavaTestKit(system);//pretendingthattheprobeisthereceivingBar,byreturningitinthePropsPro
首先让我说我是Scala的新手;但是,我发现基于Actor的并发模型很有趣,并且我尝试将其用于一个相对简单的应用程序。我遇到的问题是,尽管我能够让应用程序运行,但结果(在实时、CPU时间和内存使用方面)的效率远低于基于Java的等效解决方案使用从ArrayBlockingQueue中提取消息的线程。我想明白为什么。我怀疑这可能是我缺乏Scala知识,并且我造成了所有的低效率,但在多次尝试重新设计应用程序但没有成功之后,我决定向社区寻求帮助。我的问题是:我有一个包含许多行的gzip文件,格式为:SomeIDcomma_separated_list_of_values例如:123412,4
到目前为止,我唯一看到的是有人发布了一个测试TypedActor的示例。我认为没有办法通过Junit来测试UntypedActor?Akka文档一天比一天好,但我没有看到提到测试。它真的很明显,我只是错过了什么吗? 最佳答案 要使用JUnit进行测试,您需要使用JUnit提供的工具,有关测试Actor(Java等同于UntypedActor)的文档位于:http://akka.io/docs/akka/snapshot/scala/testing.html 关于java-我们如何在Jav
要在Akka(Java绑定(bind))中实现您自己的自定义actor,您可以扩展UntypedActor基类。这需要您定义自己的onReceive(...)方法:@OverridepublicvoidonReceive(Objectmessage){//TODO}手头的问题是确定一种消息处理策略,使参与者能够处理多种类型的消息。一种策略是使用反射/类型。这里的问题是:它迫使我们创建空的“外壳类”,这些类只是为消息提供语义意义(见下文);和它占用了message参数并阻止我们传递任何动态或有意义的内容空壳类的例子:publicclassEmptyShellMessage{}然后在onR
我刚刚开始使用AKKA,并且有一个关于非参与者代码如何与参与者代码对话的基本问题。非参与者代码如何调用参与者并获得响应?我试过使用Patterns.ask从非Actor调用Actor,但这不起作用,因为没有Actor可以响应的“发送者”。那我应该怎么做呢? 最佳答案 这应该可以正常工作。当您使用ask时,会创建一个轻量级参与者(我相信由PromiseActorRef表示)来表示发送者,以便可以发回响应以完成>Future通过ask创建。一个小例子来说明这一点。首先是测试Actor:classTestActorextendsUntyp
我在作为akkaactor启动的服务器的字段注入(inject)中遇到空指针异常。附表部分:privateActorRefmyActor=Akka.system().actorOf(newProps(Retreiver.class));@OverridepublicvoidonStart(Applicationapp){log.info("Startingschedular.....!");Akka.system().scheduler().schedule(Duration.create(0,TimeUnit.MILLISECONDS),Duration.create(30,Time
我有以下驱动程序/主类封装了我的Akka程序://Groovypseudo-codeclassFizzBuzz{ActorSystemactorSystemstaticvoidmain(String[]args){FizzBuzzd=newFizzBuzz()d.run()}voidrun(){InitializeinitCmd=newInitialize()MasterActormaster=actorSystem.get(...)//Tellstheentireactorsystemtoinitializeitselfandstartdoingstuff.//ChickenCluc
我想避免使用标记类和大的if-elseblock或switch语句,而是使用具有类层次结构的多态性,我认为这是更好的做法。例如,如下所示,执行方法的选择仅依赖于Actor类型对象的一个字段。switch(actor.getTagField()){case1:actor.act1();break;case2:actor.act2();break;[...]}会变成actor.act();并且act方法将在Actor的子类中被覆盖。但是,在运行时决定实例化哪个子类的最明显方法看起来与原始类非常相似:ActornewActor(inttype){switch(type){case1:re
我正在尝试使用ActorFor获取现有的ActorRef或创建一个新的(如果它不存在)。我有以下代码,但它似乎没有按预期工作。.isTerminated()始终为真。ActorSystemsystem=ActorSystem.create("System");ActorRefsubscriberCandidate=system.actorFor("akka://System/user/"+name);if(subscriberCandidate.isTerminated()){ActorRefsubscriber=system.actorOf(newProps(newUntypedAc