如何订阅Volttron中的不同主题

时间:2016-07-23 22:22:52

标签: 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):

2 个答案:

答案 0 :(得分:3)

您可以通过以下两种方式完成此任务:

您可以使用多次调用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)

或者你可以在同一个类方法上使用多个装饰器:

@PubSub.subscribe('pubsub', 'EnergyManagement/CurrentPrice')
@PubSub.subscribe('pubsub', 'EnergyManagement/futurePrice')
def on_match(self, peer, sender, bus,  topic, headers, message):
    pass

答案 1 :(得分:1)

如果您想使用相同的方法订阅多个主题,您可以使用其他方式进行订阅。您可以在“onstart”方法中执行此操作:

self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic1”,callback=callback_method)

self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic2”,callback=callback_method)