Мне нужно получать опубликованные сообщения от системы Google Pub / Sub с помощью подписчика на основе Python.
Для этого я сделал следующие шаги:
- В веб-консоли я создал проект, реестр, тему телеметрии, устройство и прикрепил тему подписки к теме телеметрии
- A Момент, когда мой код может публиковать сообщения через мост mqtt, а также функциональность публикации библиотеки pubsub
- Я могу вытащить это сообщение через терминал, используя следующий cmd:
gcloud pubsub subscriptions pull --auto-ack projects/{project_id}/subscriptions/{subscription_topic}
В следующем вы увидите важный фрагмент моего кода. Он основан на git-examples, но некоторые функции больше не существуют в версии 0.39.1 пакета google-cloud-pubsub . Одним из примеров является метод subscriber.subscription_path ().
def receive_messages(subscription_path, service_account_json):
import time
from google.cloud import pubsub_v1
subscriber = pubsub_v1.SubscriberClient(credentials=service_account_json)
#subscription_path = subscriber.subscription_path(
# project_id, subscription_name)
def callback(message):
print('Received message: {}'.format(message))
message.ack()
subscriber.subscribe(subscription_path, callback=callback)
print('Listening for messages on {}'.format(subscription_path))
while True:
time.sleep(60)
Когда я запускаю эту функцию, бесчисленное количество потоков запускается в фоновом режиме по крупицам, но ни один из них, похоже, никогда не завершает или не запускает функцию обратного вызова.
- Надеюсь, я установил все требования:
pip3 freeze
asn1crypto==0.24.0
cachetools==3.0.0
certifi==2018.11.29
cffi==1.11.5
chardet==3.0.4
cryptography==2.4.2
google-api-core==1.7.0
google-api-python-client==1.7.5
google-auth==1.6.2
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.2.0
google-cloud-bigquery==1.8.1
google-cloud-core==0.29.1
google-cloud-datastore==1.7.3
google-cloud-monitoring==0.31.1
google-cloud-pubsub==0.39.1
google-resumable-media==0.3.2
googleapis-common-protos==1.5.6
grpc-google-iam-v1==0.11.4
grpcio==1.17.1
httplib2==0.12.0
idna==2.8
keyring==10.1
keyrings.alt==1.3
oauthlib==3.0.0
paho-mqtt==1.4.0
protobuf==3.6.1
pyasn1==0.4.5
pyasn1-modules==0.2.3
pycparser==2.19
pycrypto==2.6.1
pycurl==7.43.0
pygobject==3.22.0
PyJWT==1.6.4
python-apt==1.4.0b3
pytz==2018.9
pyxdg==0.25
redis==3.0.1
requests==2.21.0
requests-oauthlib==1.2.0
RPi.GPIO==0.6.5
rsa==4.0
SecretStorage==2.3.1
six==1.12.0
unattended-upgrades==0.1
uritemplate==3.0.0
urllib3==1.24.1
virtualenv==16.2.0
- Я запускаю этот код в Debian, а также в Windows 10 и обновляю gcloud:
gcloud components update
В течение прошлой недели я пробовал разные решения или запускал, казалось бы, устаревшие примеры Google. Также не помогла документация, которая кажется даже старше, чем примеры кода. Поэтому я надеюсь, что кто-то здесь сможет помочь мне наконец получить клиентские сообщения на основе Python через Pub / Sub-Sytsem.
Я надеюсь, что смогу предоставить самую важную информацию и заранее поблагодарить вас за ваши усилия, чтобы помочь мне.