Google Cloud PubSubトピックの長期プルサブスクリプションを確立しようとしています。 私はドキュメントhere、すなわちで与えられた例と非常によく似たコードを使用しています:私はこのことを見たStatusCode.UNAVAILABLEを返すGoogle PubSubのPythonクライアント
Exception in thread Consumer helper: consume bidirectional stream:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/path/to/google/cloud/pubsub_v1/subscriber/_consumer.py", line 248, in _blocking_consume
self._policy.on_exception(exc)
File "/path/to/google/cloud/pubsub_v1/subscriber/policy/thread.py", line 135, in on_exception
raise exception
File "/path/to/google/cloud/pubsub_v1/subscriber/_consumer.py", line 234, in _blocking_consume
for response in response_generator:
File "/path/to/grpc/_channel.py", line 348, in __next__
return self._next()
File "/path/to/grpc/_channel.py", line 342, in _next
raise self
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, The service was unable to fulfill your request. Please try again. [code=8a75])>
:
def receive_messages(project, subscription_name):
"""Receives messages from a pull subscription."""
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
project, subscription_name)
def callback(message):
print('Received message: {}'.format(message))
message.ack()
subscriber.subscribe(subscription_path, callback=callback)
# The subscriber is non-blocking, so we must keep the main thread from
# exiting to allow it to process messages in the background.
print('Listening for messages on {}'.format(subscription_path))
while True:
time.sleep(60)
問題は、私は時々、次のトレースバックを受けていますということですanother questionで参照されましたが、ここではPythonで正しく処理する方法を尋ねています。例外でリクエストをラップしようとしましたが、バックグラウンドで実行されているようで、そのエラーの場合は再試行できません。
FWIW、約1時間後に[cpu problem](https://github.com/GoogleCloudPlatform/google-cloud-python/issues/3965)があります。私は、あなたがエラーを無視するたびに問題がスレッドリークであると思う(他の人は 'DEADLINE_EXCEEDED'の後にそれを取得する)が、修正を見つけることができませんでした。私は古いAPIを使い、ストリームのものを使うのではなく、自分で定期的にプルすることに戻った。 [この例](https://github.com/GoogleCloudPlatform/cloud-pubsub-samples-python/blob/master/cmdline-pull/pubsub_sample.py)は、これを設定するのに便利でした。 –
返事をありがとう...非常に簡単にすべき何かのために非常に不合理なようだ。手元にあるタスクについては、魅力のように動作する 'golang'クライアントライブラリを使用して終了しました – adrpino
[githubの関連issue](https://github.com/GoogleCloudPlatform/google-cloud-python/issues/2683) – Blackus