Nano Hash - криптовалюты, майнинг, программирование

Как добиться истинной модульности приложения, используя Akka в пакетах OSGi?

При использовании акторов Akka каждый созданный актор регистрируется в ActorRegistry. ActorRegistry является одноэлементным и позволяет легко находить и управлять (запускать, останавливать и т. д.) всеми участниками.

Однако в среде OSGi можно установить ряд пакетов приложений, каждый из которых использует внутренние акторы Akka (и Akka устанавливается как сам пакет). Некоторые действующие лица пакета приложений должны быть доступны для других пакетов и действовать как экспортируемые службы. Другие являются строго внутренними для пакета. Однако ActorRegistry содержит всех акторов всех пакетов (поскольку это синглтон), то есть как экспортируемых, так и внутренних. Это означает, что даже действующие лица, используемые внутри пакета, доступны для любого другого пакета.

Но я хотел бы получить больше контроля над тем, какие актеры доступны за пределами пакета. В идеале каждый пакет должен иметь свой собственный ActorRegistry и решать, какие из его акторов будут опубликованы как служба OSGi.

Итак, как лучше всего использовать Akka для модульного приложения в среде OSGi, чтобы добиться истинной модульности?

(Информация об этом на http://blog.xume.com/2011/02/actorregistry-scope-using-akka-in-osgi.html


Ответы:


1

Насколько я помню, ActorRegistry был синглтоном в более ранних версиях Akka, и, насколько я вижу сейчас в коде, это больше не так. Теперь ActorRegistry — это последний класс с экземпляром, созданным для объекта-компаньона Актера:

object Actor extends Logging {
   ...
   val registry = new ActorRegistry
   ...
}

class LocalActorRef { 
  ...
  def initializeActorInstance = {
     ...
     Actor.registry.register(this)
     ...
  }
  ...
  def stop = {
     ...
     Actor.remote.unregister(this)
     ...
  }
  ...
}

Таким образом, вы, очевидно, можете создать несколько экземпляров реестра.

Во-вторых, как вы знаете, акторы регистрируются/дерегистрируются в ActorRegistry по start/stop методам, таким образом, в вашем случае я бы закончил на подклассах/смешении Actor/LocalActorRef (перегружая start/stop, отвечающих за регистрацию, и добавляя сюда функциональность, которую вы ищете) и/или добавить свой собственный ActorRegistry.

08.02.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..