Как проверить размер тайника в актере

Я реализовал скрытие в актере, используя метод stash в Akka actor, но теперь мне нужно просмотреть его размер (т.е. нет сообщений в stash). Есть ли способ сделать это?

Ниже приведены метод и документация к нему -

/**
   *  Adds the current message (the message that the actor received last) to the
   *  actor's stash.
   *
   *  @throws StashOverflowException in case of a stash capacity violation
   *  @throws IllegalStateException  if the same message is stashed more than once
   */
  def stash(): Unit = {
    val currMsg = actorCell.currentMessage
    if (theStash.nonEmpty && (currMsg eq theStash.last))
      throw new IllegalStateException(s"Can't stash the same message $currMsg more than once")
    if (capacity <= 0 || theStash.size < capacity) theStash :+= currMsg
    else throw new StashOverflowException(
      s"Couldn't enqueue message ${currMsg.message.getClass.getName} from ${currMsg.sender} to stash of $self")
  }

1 ответ

В akka Stash внутренне реализован как StashBuffer. StashBuffer - это не изменяющий потоки буфер изменяемых сообщений, который можно использовать для буферизации сообщений внутри акторов, а затем их распаковки. В буфере может храниться не более заданного количества сообщений.

StashBuffer - это черта

trait StashBuffer[T] extends AnyRef

который содержит метод размера

abstract def size: Int

который обозначает число количество элементов в буфере сообщений. Пожалуйста, обратитесь https://doc.akka.io/api/akka/current/akka/actor/typed/scaladsl/StashBuffer.html

Другие вопросы по тегам