Как проверить размер тайника в актере
Я реализовал скрытие в актере, используя метод 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