Akka Remote общие классы - PullRequest
       22

Akka Remote общие классы

0 голосов
/ 23 октября 2018

У меня есть два разных проекта Java 8, которые будут жить на разных серверах и оба будут использовать Akka (в частности, Akka Remoting) для общения друг с другом.

Например, одно приложение может отправить Fizzbuzzсообщение другому приложению:

public class Fizzbuzz {
    private int foo;
    private String bar;

    // Getters, setters & ctor omitted for brevity
}

Я никогда раньше не использовал Akka Remoting.Я предполагаю, что мне нужно создать третий проект, библиотеку / jar для хранения общих сообщений (таких как Fizzbuzz и другие), а затем включить эту библиотеку в оба проекта в качестве зависимости.

просто?Существуют ли какие-либо соображения по поводу сериализации (или других аспектов Akka и / или сетей), которые влияют на дизайн этих «общих» сообщений?Заранее спасибо!

1 Ответ

0 голосов
/ 27 октября 2018

Совместно используемая библиотека - это надежный способ, за исключением тех случаев, когда действительно существуют проблемы с сериализацией:

Документы с удаленным доступом Akka :

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

Для получения дополнительной информации см. Сериализация .

В основном вам потребуетсяобеспечить и настроить сериализацию для реквизитов актеров и отправленных сообщений (конечно, включая все вложенные классы).Если я не ошибаюсь, настройки по умолчанию приведут вас к работе без каких-либо настроек на вашей стороне, при условии, что все, что вы отправляете по сети, является java-serializable.

Тем не менее, default config использует сериализацию Java по умолчанию , которая, как известно, весьма неэффективна - поэтому вы можете переключиться на protobuf, Kryo или, возможно, даже JSON.В этом случае имеет смысл предоставить реализацию сериализации и привязки в качестве разделяемой библиотеки - либо выделенной, либо части «общих моделей», которые вы упомянули в вопросе, - зависит от того, хотите ли вы использовать ее в другом месте ивозражайте / не возражайте против повсеместно возникающих переходных зависимостей, связанных с serailization.

Наконец, если вы позволите какое-то личное мнение, я бы сначала предложил попробовать protobuf - это двоичный формат (читай: эффективный) ишироко поддерживается (есть привязки для других языков).Kryo тоже хорошо работает (у меня есть несколько приложений akka-кластера с закрытым исходным кодом с сериализацией kryo в производстве), но есть несколько особенностей, связанных с обработкой коллекции / карты.

...