当前位置: 首页 > 知识库问答 >
问题:

Akka JavaStkit JUnit消息未发送给默认/用户

艾跃
2023-03-14

我正在使用JavaStkit编写一个Akka JUnit测试,并试图找出我做错了什么。

ActorSystem akkaSystem = ActorSystem.create("myAkkaSystem");

Props executiveProps = Props.create(ExecutiveSupervisor.class);
TestActorRef<ExecutiveSupervisor> executiveSupervisorTestActorRef = TestActorRef.create(akkaSystem, executiveProps, "testExecutiveSupervisor");

new JavaTestKit(akkaSystem) {{

    final Inbox inbox = Inbox.create(akkaSystem);
    inbox.send(executiveSupervisorTestActorRef, new Object());
    ResultAndData result = (Object)inbox.receive(Duration.create(2, TimeUnit.SECONDS));

 }};

执行通过演员中的代码非常愉快。在worker中的某一点上,我希望它在ActorSystem级别将传递的相同对象(ResultAndData)返回到JUnit的收件箱。即。我希望worker将传递给它的对象返回给其父级。

但是,就像它试图返回下面的行一样:

log.info("SUCCESS!!!!!!!!!!!");
getContext().parent().tell(result, getSelf());  //FAILS HERE

此时我得到以下消息:

expectMsgEquals(duration("2 seconds"), result);

谢谢大家,任何帮助都很好。

共有1个答案

司寇昱
2023-03-14

您应该这样返回消息:

sender().tell(result, getSelf());

现在您正在将消息发送给您的演员的父级,因为您的演员是顶级演员,这将不会成功。您的参与者的父级不是收件箱,因此您尝试的内容无法成功。父角色是在上下文中创建子角色的角色,当您通过actorSystem上的TestActorRef创建角色时,它将是一个顶级角色,将default/user角色作为父角色,您不能使用它来接收消息。我怀疑您真正想要的是响应消息,因此您应该将消息发送给当前消息的发送者,您可以使用sender()检索该消息。

 类似资料:
  • 接口说明 轻推轻应用/订阅号支持发送文本、图片、文本卡片、图文、key-value、文件、待办等消息类型。本接口针对各种消息类型和发送的对象(单发、群发以及给部分人发送)进行了定义。 注:openid是用户关注某个轻应用/订阅号后生成的唯一id,单发和给部分人发送消息必须携带此参数,可以通过如下接口来获取: 根据qt_code获取用户基本信息 获取使用者列表 通过userId获取openid 消息

  • 主动发送消息 use EasyWeChat\Kernel\Messages\TextCard; // 获取 Messenger 实例 $messenger = $app->messenger; // 准备消息 $message = new TextCard([ 'title' => '你的请假单审批通过', 'description' => '单号:1928373, ...

  • 向已经创建连接凭据的设备发送消息数据。 请求方式: |4|2|3|message|\r 参数 message 发送的消息内容 返回值: "|4|2|3|1|\r" 发送成功 "|4|2|3|2|\r" 发送失败 Arduino样例: softSerial.print("|4|2|3|DFRobot|\r");

  • 如何保持一个连续的流,以“反应”新的丢弃的文件?(或其他事件,如HTTP GET请求或类似的事件)... 例如,如果我不返回PublisherBuilder的实例,而是返回一个整数,那么我的kafka主题将由一个非常巨大的整数值流填充。这就是为什么示例在发送消息时使用一些间隔... 我应该使用一些CompletationStage或CompletableFuture吗?RXJava2?使用哪个li

  • 我正在处理一个套接字 IO 应用程序,该应用程序使用来自 ActiveMQ 队列的消息。我正在为节点JS使用踩踏库 在大多数情况下,它工作正常,但我需要能够重新发送未确认的消息。跳过 amq.ack(消息)的消息不会被重新尝试并显示为正在等待 ActiveMQ Web 控制台。有没有办法让我重新发送它们?

  • 问题内容: 我已经编写了一个函数,希望在提交表单之前显示确认消息。我应该如何添加我的条件。下面是我的代码。 问题答案: 解决方案是使用ajax属性。 beforeSend是发送之前的请求前回调函数.beforeSend函数中返回false将取消请求。 AJAX