Wenn Sie einen Agenten haben, der seinen eigenen Endpunkt registriert, sollten Sie dies während des Onstart-Signals tun. Das Folgende wurde aus dem Volttron Central Agent extrahiert. Es zeigt, wie man einen Endpunkt registriert, der dynamisch ist (verwendet Volttron RPC als Endpunkt), sowie statisch (wo der HTML einfach bedient wird). Ich habe die un-notwendigen Bits für dieses Beispiel entfernt.
onstart volttron central code
Aus Gründen der Klarheit und MASTER_WEB VOLTTRON_CENTRAL sind eindeutige Kennungen für die spezifischen Agenten auf der volttron Instanz laufen.
@Core.receiver('onstart')
def _starting(self, sender, **kwargs):
""" Starting of the platform
:param sender:
:param kwargs:
:return:
"""
...
# Registers dynamic route.
self.vip.rpc.call(MASTER_WEB, 'register_agent_route',
r'^/jsonrpc.*',
self.core.identity,
'jsonrpc').get(timeout=30)
# Registers static route.
self.vip.rpc.call(MASTER_WEB, 'register_path_route', VOLTTRON_CENTRAL,
r'^/.*', self._webroot).get(timeout=30)
Da Sie die Route onstart hinzugefügt haben, sollten Sie sie auch entfernen, wenn der Agent gestoppt wurde. onstop referenced code
@Core.receiver("onstop")
def stopping(self, sender, **kwargs):
'''
Release subscription to the message bus because we are no longer able
to respond to messages now.
'''
try:
# unsubscribes to all topics that we are subscribed to.
self.vip.pubsub.unsubscribe(peer='pubsub', prefix=None, callback=None)
except KeyError:
# means that the agent didn't start up properly so the pubsub
# subscriptions never got finished.
pass
Dank Craig. Ich werde es versuchen und später darauf zurückkommen. – HNGO
Wenn es 10 verschiedene Apps mit 10 verschiedenen UIs gibt, erzeugt dieser Ansatz zu viele Backend-Agenten, Routen und Frontend-Ressourcen überall? – HNGO
Diese Registrierung von Routen ist eine Standardmethode. Es ist nicht neu. Die Frontend-Ressourcen sind und sollten auf der Client-Seite sein. – Craig