Исключение в цикле подписки: ключ подписки не настроен

#python #publish-subscribe #pubnub

#python #опубликовать-подписаться #pubnub

Вопрос:

Кто-нибудь может помочь мне разобраться, почему я получаю это исключение, пожалуйста? Несмотря на то, что у меня настроен ключ suscribe, кажется, что это не так.

Вот исключение: «Исключение в цикле подписки: ключ подписки не настроен политика повторного подключения отключена, пожалуйста, обработайте повторное подключение вручную».

 import time

from pubnub.pubnub import PubNub
from pubnub.pnconfiguration import PNConfiguration
from pubnub.callbacks import SubscribeCallback
from backend.blockchain.block import Block

pnconfig = PNConfiguration()
pnconfig.suscribe_key = 'sub-c-6d0fe192-dee4-11ea-9b19-...'
pnconfig.publish_key = 'pub-c-c3553c68-bf24-463c-ae43-...'

CHANNELS = {
'TEST': 'TEST',
'BLOCK': 'BLOCK'
}

class Listener(SubscribeCallback):
    def __init__(self, blockchain):
        self.blockchain = blockchain

        def message(self, pubnub, message_object):
            print('n-- Channel: {message_object.channel} | Message: {message_object.message}')

            if message_object.channel == CHANNELS['BLOCK']:
                block = Block.from_json(message_object.message)
                potential_chain = self.blockchain.chain[:]
                potential_chain.append(block)

                try:
                    self.blockchain.replace_chain(potential_chain)
                    print('n -- Successfully replaced the local chain')
                except Exception as e:
                    print('n -- Did not replace chain: {e}')

class PubSub():
    """
    Handles the publish/subscribe layer of the application.
    Provides communication between the nodes of the blockchain network.
    """
    def __init__(self, blockchain):
        self.pubnub = PubNub(pnconfig)
        self.pubnub.subscribe().channels(CHANNELS.values()).execute()
        self.pubnub.add_listener(Listener(blockchain))

        def publish(self, channel, message):
            """
            Publish the message object to the channel.
            """
            self.pubnub.publish().channel(channel).message(message).sync()

        def broadcast_block(self, block):
            """
            Broadcast a block object to all nodes.
            """
            self.publish(CHANNELS['BLOCK'], block.to_json())

            def main():
                pubsub = PubSub()

                time.sleep(1)

                pubsub.publish(CHANNELS['TEST'], { 'foo': 'bar' })

                if __name__ == '__main__':
                    main()
  

Комментарии:

1. У меня возникли некоторые проблемы с запуском вашего кода как есть, но я переформатировал / отступил и обновил приведенный выше в вашем вопросе, чтобы копирование / вставка вашего кода работала без ошибок.

2. Но я не мог понять, для чего устанавливать backend.blockchain.block , поэтому я не смог выполнить тестовый запуск. Но вы упомянули проблему повторного подключения. Успешно ли выполняется ваш скрипт через некоторое время (после отключения?) вы получаете эту ошибку?

3. Нет, Крейг, он вообще не запускался

Ответ №1:

Мне не удалось получить сообщение об ошибке «Исключение в цикле подписки: ключ подписки не настроен политика повторного подключения отключена, пожалуйста, обработайте повторное подключение вручную»..

Я использовал блок кода:

 pnconfig = PNConfiguration()
pnconfig.subscribe_key = "my_subkey"
pnconfig.publish_key = "my_pubkey"
pnconfig.ssl = True
pnconfig.uuid = "my_custom_uuid"
pnconfig.reconnect_policy = "LINEAR"
pubnub = PubNub(pnconfig)
  

со страницы:https://www.pubnub.com/docs/python/api-reference-configuration
и добавлено:

 PNReconnectionPolicy.NONE
  

со страницы:https://www.pubnub.com/docs/python/api-reference-configuration