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

Akka消息未送达

上官凯歌
2023-03-14

我有一个PropertiesStoreactor,它持有一个可变表。通过rest API操作的运行时配置的缓冲区。您可以使用以下对象从所述商店进行读写:

Read(无,属性(key=“MyConfigKey”,value=None))

存储以Property及其值响应。

为了方便找到这家店,我有另一个演员(一个客串),我在飞行中创造:

object PropertyLookup {
  def apply(propertyKey: String, target: Option[ActorRef]): Props = {
    Props(new PropertyLookup(propertyKey, target))
  }
}

class PropertyLookup(key: String, target: Option[ActorRef]) extends Actor with ActorLogging {
  val PropertiesStore = "/user/Master/DataStore/PropertiesStore"
  val propertiesActor = context.actorSelection(PropertiesStore)

  def receive: Actor.Receive = {
    case _=>
      log.info(s"Looking up ${key} via ${propertiesActor}")
      propertiesActor.tell(Read(None, Property(key, None)), target.getOrElse(sender()))
      log.info(s"Sent property lookup to PropertiesStore: ${key}")
//      context.stop(self)
  }
}

这使我能够将所述参与者的“定位”(即通过其路径)保持在一个位置,避免在移动时进行过多的返工。此属性查找有一个可选的目标参与者,一旦执行查找,属性存储将将结果发送到该参与者。在我做一些工作之前,我在另一个参与者中使用所有这些来获取配置值:

  context.actorOf(PropertyLookup(PropertyKeys.SpreadsheetURL, None), s"PropertiesLookup_${self.path.name}") ! None

但当我这么做时,我得到了以下警告:

来自参与者的消息[domain.Read][akka://NN/user/$a/Master/DataStore/PlayerStore#-1100303450]给演员[akka://NN/user/Master/DataStore/PropertiesStore]没有送达。[2] 遇到死信。可以使用配置设置“akka”关闭或调整此日志记录。记录死信和阿克卡。关闭期间记录死信'

而且我从来没有在被调用者中收到过我的Property实例。cameo(Property tyLookup的实例)确实做了它的事情并记录了日志,所以我知道该部分正在工作。

发生了什么事?我的客串全错了吗?有更好的方法吗?我如何理解这个警告周围发生了什么

共有1个答案

萧升
2023-03-14

你的代码和日志输出是最新的吗?首先你给出了Read as的定义

Read(Property(key ="MyConfigKey", value = None))

但你却把它当作

Read(None, Property(key, None))

其次,您正在创建名为“PropertiesLookup_${self.path.name}”的actor。但您的日志输出显示,此参与者名称不包含“PropertiesLookup”字符串。

此外,请注意,您记录的路径包括一个$a,这表明路径中实际上有一个匿名参与者,而这不是actorSelection调用中的内容。

 类似资料:
  • 我正在使用JavaStkit编写一个Akka JUnit测试,并试图找出我做错了什么。 执行通过演员中的代码非常愉快。在worker中的某一点上,我希望它在ActorSystem级别将传递的相同对象(ResultAndData)返回到JUnit的收件箱。即。我希望worker将传递给它的对象返回给其父级。 但是,就像它试图返回下面的行一样: 此时我得到以下消息: 谢谢大家,任何帮助都很好。

  • 在官方的akka 2.0.4文档中,它说: actor重新启动只替换实际的actor对象;邮箱的内容不受重新启动的影响,因此在postRestart钩子返回后,将继续处理邮件。不会再收到触发异常的消息。在重新启动时发送给参与者的任何消息都将像往常一样排队到其邮箱。 我唯一能想到的是,如果消息由于某种原因出现畸形,它将永远不会离开系统,并导致演员定期重新启动...

  • 标题是不言自明的,我希望能够向父执行元发送消息(意味着我希望父执行元的)。在Akka Classic(非类型化)中,父执行元的可以通过以下方式从子执行元的获得: (例如,参见这个问题(在Java))。 但是,Akka Typed中的不公开父级的。Scala中是否有惯用的方法为父执行元获取?

  • > 构造函数接受InetSocketAddress和actorref。InetSocketAddress是有意义的(我假设这是目的地),但是actorref是什么?这是我第一次使用akka,但据我了解,ActorRef是另一个演员的引用。既然我的TCP客户端是一个参与者,并且我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为什么我要给它一个参与者引用? 伙伴对象中的道具功能是用

  • Hi akka古鲁们:)你能在这一次指导我吗? 我要做的是-演员A向演员B要消息,然后等一个回来。但是,不知何故,演员B给A的不是一条信息,而是其中的4条信息。A正确完成,但rest消息中有3条被算作死信。为什么?这样对吗?我是说,演员A有一个合适的处理人,那为什么信都死了?:-( [INFO][11/22/2013 22:00:38.975][ForkJoinPool-2-worker-7][a

  • 我正在通过在WebSocketClientFlow上遵循doc来尝试客户端websocket。