Есть ли атомная трансляция в акке?

Мне нужна атомная трансляция, и я хочу использовать кластер Акка.

Я не уверен, есть ли в akka атомная трансляция, поэтому я просто хочу спросить, чтобы быть уверенным.

Я знаю, что есть такие вещи, как DistributedPubSubMediator.SendToAll так же как Cluster Aware Routers, Поддерживает ли какой-нибудь общий заказ трансляцию?

Под атомным (общим порядком) вещанием я подразумеваю, что субъект A отправляет широковещательную передачу bA, а субъект B передает широковещательную передачу bB (параллельно и с другого узла). В конце концов, (каждый участник получает сообщение bA до bB) или (каждый участник получает сообщение bB до bA).

2 ответа

Решение

Единственная гарантия заказа, предлагаемая Akka, заключается в том, что сообщения отправляются актером. A актеру B будет получен для этой пары актеров. Сообщения от других актеров актеру B могут быть получены до, после или чередуются с сообщениями от A в B,

Так что нет, Akka не предоставляет запрашиваемую вами гарантию заказа.

По умолчанию такой гарантии нет, поскольку сообщения отправляются асинхронно. Но вы можете просто использовать посредника X (любой актер, включая DistributedPubSubMediator) которая будет вызывать такую ​​гарантию: отправить (bA, recipients) от A в X, Отправить (bB, recipients) от B в X, а также X следует просто передавать каждое сообщение его получателям (оно будет "атомарным" и последовательным, как это делается внутри одного субъекта).

Если вам нужно сделать это в кластере - вы можете попробовать "Cluster Singleton", чтобы избежать единой точки отказа, пожертвовав высокой доступностью и, возможно, допуском разбиения (вам придется удалить узлы вручную из кластера, чтобы разрешить "P")

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