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

これは、次の 2 つの方法で行うことができます。

self.vip.pubsub.subscribe に対して複数の呼び出しを使用できます。

これらの呼び出しは、エージェントの開始が完了した後に発生する必要があります。アミンが彼の答えで言及しているように、これは「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 に答える