如何订阅 Volttron 中的不同主题
How to subscribe to different topics in Volttron
当我使用下面的代码订阅一个主题时,我不能使用相同的代码订阅一些不同的主题。如何订阅不同的主题?
@PubSub.subscribe('pubsub', 'EnergyManagement/CurrentPrice')
def on_match(self, peer, sender, bus, topic, headers, message):
@PubSub.subscribe('pubsub', 'EnergyManagement/futurePrice')
def on_match(self, peer, sender, bus, topic, headers, message):
如果您想使用相同的方法订阅多个主题,您可以使用其他订阅方式。您可以在“onstart”方法中执行此操作:
self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic1”,callback=callback_method)
self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic2”,callback=callback_method)
您可以通过两种不同的方式执行此操作:
您可以多次调用 self.vip.pubsub.subscribe。
这些调用必须在代理完成启动后发生。正如 Amin 在他的回答中提到的那样,您可以使用 "onstart" 方法执行此操作。此方法可用于在代理启动后随时动态更改订阅。
@Core.receiver('onstart')
def my_onstart_method(self, sender, **kwargs):
self.vip.pubsub.subscribe(peer='pubsub', prefix="path/to/topic1", callback=self.on_match)
self.vip.pubsub.subscribe(peer='pubsub', prefix="path/to/topic2", callback=self.on_match)
或者您可以在同一个 class 方法上使用多个装饰器:
@PubSub.subscribe('pubsub', 'EnergyManagement/CurrentPrice')
@PubSub.subscribe('pubsub', 'EnergyManagement/futurePrice')
def on_match(self, peer, sender, bus, topic, headers, message):
pass
当我使用下面的代码订阅一个主题时,我不能使用相同的代码订阅一些不同的主题。如何订阅不同的主题?
@PubSub.subscribe('pubsub', 'EnergyManagement/CurrentPrice')
def on_match(self, peer, sender, bus, topic, headers, message):
@PubSub.subscribe('pubsub', 'EnergyManagement/futurePrice')
def on_match(self, peer, sender, bus, topic, headers, message):
如果您想使用相同的方法订阅多个主题,您可以使用其他订阅方式。您可以在“onstart”方法中执行此操作:
self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic1”,callback=callback_method)
self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic2”,callback=callback_method)
您可以通过两种不同的方式执行此操作:
您可以多次调用 self.vip.pubsub.subscribe。
这些调用必须在代理完成启动后发生。正如 Amin 在他的回答中提到的那样,您可以使用 "onstart" 方法执行此操作。此方法可用于在代理启动后随时动态更改订阅。
@Core.receiver('onstart')
def my_onstart_method(self, sender, **kwargs):
self.vip.pubsub.subscribe(peer='pubsub', prefix="path/to/topic1", callback=self.on_match)
self.vip.pubsub.subscribe(peer='pubsub', prefix="path/to/topic2", callback=self.on_match)
或者您可以在同一个 class 方法上使用多个装饰器:
@PubSub.subscribe('pubsub', 'EnergyManagement/CurrentPrice')
@PubSub.subscribe('pubsub', 'EnergyManagement/futurePrice')
def on_match(self, peer, sender, bus, topic, headers, message):
pass