В шардинге кластера akka, как определить наличие ключа типа шардинга?

Как описано в akka docs, akka отправляет сообщения по принципу «выстрелил-забыл».

Но в шаблоне запроса, если ключ типа не существует, мне все равно нужно ждать ответа по тайм-ауту. Есть ли подход к отказу сразу при отправке сообщения на несуществующий typekey?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что под несуществующим ключом типа вы имеете в виду ключ типа, который не был передан init.

При использовании типизированного сегментирования вы можете запросить локальный ActorRef, возвращенный из ClusterSharding(actorSystem).shardState, с помощью запроса GetShardRegionState(typeKey, _). Ответ CurrentShardRegionState's shards будет пустым, если typekey не был инициализирован (обратите внимание, что, поскольку это основано на классическом сегментировании кластера под капотом, технически это проверит только наличие typekey с этим инициализированным именем) на этом узле.

В классическом сегментировании набор имен typekey, которые были инициализированы на узле, может быть получен синхронно через ClusterSharding(actorSystem).shardTypeNames.

Обратите внимание, что обычно рекомендуется инициализировать сегментирование для ключей всех типов очень рано в процессе запуска и упорядочивать запуск таким образом, чтобы функции, зависящие от сегментирования, не запускались до тех пор, пока не будут инициализированы все ключи типов. Например, можно запустить инициализацию сегментирования при формировании кластера, а затем (в том же обратном вызове) начать обслуживать HTTP-запросы или получать от брокера сообщений. Если он работает в Kubernetes, можно сразу связать HTTP, но определить проверку готовности, которая не станет зеленой, пока не будут инициализированы ключи типов сегментирования: тогда k8s не будет отправлять HTTP-трафик экземпляру, пока сегментирование не будет готово.

Спасибо за ваш ответ. Что делать, если неправильный typekey , например, http-сервер перенаправляет все http-запросы на вызовы сущностей, ключи типов поступают из пользовательского ввода. И GetShardRegionState возвращает осколки только на текущем узле, но роль текущего узла не порождает объект для typekey, поэтому запрос ничего не вернул.

Lin Lee 26.11.2022 03:27

Если вы не можете быть уверены, что typekey инициализирован, вызовите на нем init. Совместное использование кластера на самом деле не предназначено для этого гипердинамического варианта использования.

Levi Ramsey 26.11.2022 04:17

Существует команда GetClusterShardingStats, которая является общекластерной для ключа типа (при условии, что она является локальной initd (в противном случае она ответит пустым Map).

Levi Ramsey 26.11.2022 04:23

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