Вызов метода @RPC на удаленной платформе

У меня есть платформа A и платформа B, и я хочу вызвать метод RPC на платформе A с платформы B. Обратите внимание, что я уже читал этот вопрос: Как в VOLTTRON использовать VIP, чтобы заставить агентов разговаривать между удаленными экземплярами платформы? Мне кажется, что это может быть устаревшим, поскольку в нем ничего не упоминается о файле известных хостов и новом интерфейсе добавления аутентификации volttron-ctl. Также мне все еще нужно включать этот массивный URL-адрес, упомянутый в комментариях, с параметрами serverkey, secretkey? Я также прочитал исходный код SimpleForwarder: https://github.com/VOLTTRON/volttron/blob/5cc71e9982338e242bf801da372aa66ed14abbd9/examples/SimpleForwarder/simpleforwarder/simpleforwarder.py URL-адрес для подключения VIP в этом примере: "destination-vip": "ipc://@/tmp /v4home/run/vip.socket", но это не соответствует ответам, данным в вопросе о переполнении стека. http://volttron.readthedocs.io/en/4.1/core_services/messagebus/VIP/VIP-Authentication.html В этом разделе документации содержится некоторая информация о том, как пройти аутентификацию через vip, и какие шаги необходимо предпринять для вызова RPC в агенте на другой платформе. ? Может ли кто-нибудь пояснить, каков обновленный способ сделать это (для volttron 4.1), надеюсь, шаг за шагом?


person Kirtan Patel    schedule 30.08.2017    source источник


Ответы (1)


Вызов вызова RPC на удаленном агенте очень похож на выполнение публикации/подписки на другой платформе. Рабочий пример можно найти в DataMover, который вызывает метод RPC на удаленном архиваторе.

Сначала он получает ключ сервера для пункта назначения, если он находится в файле известных хостов:

hosts = KnownHostsStore()
serverkey = hosts.serverkey(destination_vip)

Если нет, он получит его из файла конфигурации агента.

Затем его метод history_setup использует метод building_agent в заголовке утилиты агента vip для создания ссылки на другую платформу путем передачи адреса, ключа сервера, открытого и секретного ключа, поэтому вам не нужно создавать URL-адрес.

self._target_platform = build_agent(address=self.destination_vip,
                                serverkey=self.destination_serverkey,
                                publickey=self.core.publickey,
                                secretkey=self.core.secretkey,
                                enable_store=False)

Затем, когда он делает публикацию, он вызывает:

  self._target_platform.vip.rpc.call(
                self.destination_historian_identity, 'insert',
                to_send).get(timeout=10)

Шаги для этого процесса:

  1. Запустите PlatformA с запущенным TargetAgent.
  2. Получить ключ сервера для PlatformA с помощью: vctl auth serverkey
  3. Стартовая платформаB
  4. Добавьте платформу A к известным хостам на платформе B: vctl add-known-host --host tcp://tcp://xxx.xxx.xxx.xxx:YYYY --serverkey SERVERKEY_FOR_A или настройте агент отправки на платформе B с ключом сервера из шага 2, виртуальный IP-адрес назначения для платформы A (tcp://xxx.xxx.xxx.xxx:YYYY)

  5. Установите SendingAgent на платформе B

  6. Получите открытый ключ для SendingAgent с помощью: vctl auth publickey
  7. Добавьте учетные данные SendingAgent в PlatformA с помощью: vctl auth add

SendingAgent теперь должен иметь возможность вызывать методы RPC для TargetAgent.

person Jereme Haack    schedule 11.09.2017
comment
Вам нужен агент, работающий на PlatformA, и вам нужна настройка аутентификации для отправителя, как на шаге 7. PlatformA просто прослушивает свой VIP-адрес. - person Jereme Haack; 26.09.2017