1

当我使用下面的代码订阅一个主题时,我不能使用相同的代码订阅一些不同的主题。如何订阅不同的主题?

@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):
4

2 回答 2

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
于 2016-07-25T17:33:59.057 回答
1

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

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

self.vip.pubsub.subscribe(peer='pubsub',prefix=”topic2”,callback=callback_method)
于 2016-07-23T22:26:10.133 回答