簡體   English   中英

如何使用當前的 pubsub 訂閱者從 googles Pub/Sub 系統獲取消息

[英]How to get messages from googles Pub/Sub sytsem by using the current pubsub subsciber

我需要使用基於 python 的訂閱者從谷歌發布/訂閱系統接收已發布的消息。

為此,我執行了以下步驟:

  • 在 Web 控制台上,我創建了一個項目、一個注冊表、一個遙測主題、一個設備並將訂閱主題附加到遙測主題
  • 此刻我的代碼可以通過 mqtt 橋發布消息以及 pubsub 庫的發布功能
  • 我可以使用以下 cmd 在終端上提取此消息:
gcloud pubsub subscriptions pull --auto-ack projects/{project_id}/subscriptions/{subscription_topic}

在下面你會看到我的代碼的重要片段。 它基於 git-examples,但在google-cloud-pubsub包的0.39.1版中似乎不再存在某些功能。 一個例子是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
  • 我在 Windows 10 和 debian 上運行該代碼並更新了 gcloud:
gcloud components update

在過去的一周里,我一直在嘗試不同的解決方案,或者開始使用看似過時的 google 示例。 此外,似乎比代碼示例還要古老的文檔也沒有幫助。 所以我希望這里有人可以幫助我最終通過 Pub/Sub-Sytsem 接收基於 python 的客戶端消息。

我希望我能提供最重要的信息,並提前感謝您為我提供的幫助。

此處的python文檔站點上維護的示例應該是最新的。 在運行任何代碼之前,請確保已遵循“為了使用此庫,首先需要執行以下步驟”部分中的所有步驟。 特別是,您可能沒有正確設置身份驗證,我認為您不應該手動傳遞憑據路徑。

  1. def callback(message: pubsub_v1.subscriber.message.Message) -> None: print(f"Received {message}.") message.ack()

stream_pull_future =subscriber.subscribe(subscription_path, callback=callback) print(f"監聽{subscription_path}上的消息..\\n")

將訂閱者包裝在“with”塊中以在完成后自動調用 close()。

withsubscriber: try: # 如果沒有設置timeout ,result() 將無限期阻塞,# 除非首先遇到異常。 streaming_pull_future.result(timeout=timeout) except TimeoutError: streaming_pull_future.cancel() # 觸發關閉。 streaming_pull_future.result() # 阻塞直到關閉完成。

[END pubsub_subscriber_async_pull]

[END pubsub_quickstart_subscriber]

`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM