Я должен предупредить, что это в меру моего понимания. Похоже, что темы в Distributed Pub Sub выпекаются актерами. Каждая тема содержит список подписчиков. Доставка сообщений в паб sub будет следовать тем же гарантиям доставки и заказа между любыми парами участников.
Я хотел бы обратиться к первому комментарию, что сообщения, отправленные/опубликованные на ту же тему, гарантированно будут доставлены в том же порядке, который они отправили. Это справедливо только для одного абонента. В этом случае тема является актером, а подписчиком является другой актер. поэтому сообщения будут доставлены в порядке (если вообще). Однако, если у меня есть два подписчика (S1 и S2) по той же теме, и я публикую сообщения A и B по той же теме, вполне возможно, что оба B (и A) будут доставлены на S1 до того, как A будет доставлен в S2.
Похоже, что сообщения, отправленные на разные темы, не будут иметь никаких гарантий заказа. Если вам нужен такой порядок, кажется, что вам нужно будет закодировать его в свой протокол обмена сообщениями (например, порядковые номера, векторные часы и т. Д.).
Кроме того, независимо от одной темы или двух тем, для вашего случая использования, вам может потребоваться подумать о других проблемах, таких как необходимость как минимум семантики обмена сообщениями. Причина в том, что даже с одной темой я не могу гарантировать, что первое сообщение в теме будет передано до второго. Я могу гарантировать, что если первое сообщение и второе сообщение будут доставлены (не потеряны), то первый будет поступать до второго. Но первый не может быть доставлен вообще, а второй может появиться без подписчика, который видит первый. Это выполняется для отправки сообщений на ту же тему, а также на разные темы.
Если вы действительно нуждаетесь в этом вам может понадобиться, чтобы оценить что-то вроде надежного прокси-шаблон: http://doc.akka.io/docs/akka/current/contrib/reliable-proxy.html
Обратная связь от других членов приветствовать ...
Спасибо за очистку, что до, высоко ценится. – JoeC
Спасибо, что разъяснил Майклу! так, если у вас есть только один издатель и несколько удаленных подписчиков (т. Е. Мастер со многими «подчиненными», которые выполняют задание, то есть идемпотент, т. Е. Если вы повторяете одно и то же несколько раз, это не эффективно, но все в порядке), тогда можно просто иметь издателя или актера, который общается с ним, как PersistentActor, когда заканчивается длинная работа, рабочий отправляет сообщение назад, а постоянный актер отмечает его как доставленный. Если он не получит это сообщение за X секунд, он снова отправит его: таким образом мы закончим, по крайней мере, одно задание, верно? –