python - 无法将消息发布到云 pub sub
问题描述
我在将 python 发布者部署到 google pub sub 时遇到问题。我正在本地 kubernetes 集群上通过 docker 运行该应用程序。我为限制发布子管理员凭据的应用程序创建了一个服务帐户。key.json 与 app.py 位于同一文件夹中
下面是 app.py 代码
import time
from google.cloud import pubsub_v1
from google.oauth2 import service_account
credentials = service_account.Credentials. from_service_account_file('key.json')
# TODO(developer)
project_id = "myaccount"
topic_id = "mytopic "
publisher = pubsub_v1.PublisherClient(credentials=credentials)
topic_path = publisher.topic_path(project_id, topic_id)
futures = dict()
def get_callback(f, data):
def callback(f):
try:
print(f.result())
futures.pop(data)
except: # noqa
print("Please handle {} for {}.".format(f.exception(), data))
return callback
for i in range(10):
data = str(i)
futures.update({data: None})
# When you publish a message, the client returns a future.
future = publisher.publish(topic_path, data.encode("utf-8"))
futures[data] = future
# Publish failures shall be handled in the callback function.
future.add_done_callback(get_callback(future, data))
# Wait for all the publish futures to resolve before exiting.
while futures:
time.sleep(5)
print(f"Published messages with error handler to {topic_path}.")
这是错误
[server] debug_error_string = "{"created":"@1610925225.129746600","description":"Resolver transient failure","file":"src/core/ext/filters/client_channel/resolving_lb_policy.cc","file_line":219,"referenced_errors":[{"created":"@1610925225.129730400","description":"DNS resolution failed for service: pubsub.googleapis.com:443","file":"src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc","file_line":377,"grpc_status":14,"referenced_errors":[{"created":"@1610925225.129633600","description":"C-ares status is not ARES_SUCCESS qtype=A name=pubsub.googleapis.com is_balancer=0: Timeout while contacting DNS servers","file":"src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc","file_line":287}]}]}"
[server] >
[server]
[server] The above exception was the direct cause of the following exception:
[server]
[server] Traceback (most recent call last):
[server] File "/usr/local/lib/python3.8/site-packages/google/api_core/retry.py", line 184, in retry_target
[server] return target()
[server] File "/usr/local/lib/python3.8/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
[server] six.raise_from(exceptions.from_grpc_error(exc), exc)
[server] File "<string>", line 3, in raise_from
[server] google.api_core.exceptions.ServiceUnavailable: 503 DNS resolution failed for service: pubsub.googleapis.com:443
[server]
[server] The above exception was the direct cause of the following exception:
[server]
[server] Traceback (most recent call last):
[server] File "/usr/local/lib/python3.8/site-packages/google/cloud/pubsub_v1/publisher/_batch/thread.py", line 263, in _commit
[server] response = self._client.api.publish(
[server] File "/usr/local/lib/python3.8/site-packages/google/pubsub_v1/services/publisher/client.py", line 569, in publish
[server] response = rpc(request, retry=retry, timeout=timeout, metadata=metadata,)
[server] File "/usr/local/lib/python3.8/site-packages/google/api_core/gapic_v1/method.py", line 145, in __call__
[server] return wrapped_func(*args, **kwargs)
[server] File "/usr/local/lib/python3.8/site-packages/google/api_core/retry.py", line 281, in retry_wrapped_func
[server] return retry_target(
[server] File "/usr/local/lib/python3.8/site-packages/google/api_core/retry.py", line 199, in retry_target
[server] six.raise_from(
[server] File "<string>", line 3, in raise_from
[server] google.api_core.exceptions.RetryError: Deadline of 120.0s exceeded while calling functools.partial(<function _wrap_unary_errors.<locals>.error_remapped_callable at 0x7fdec24c9310>, topic: "projects/myaccount /topics/mytopic"
解决方案
推荐阅读
- javascript - 选中复选框后如何使复选框为真/假
- angular - 如何使用 `providedIn` 将服务限制为一个组件
- azure - 使用 Azure Web Jobs 调用 Rest API
- javascript - 无法使用 webpack 导入具体化模块
- ios - 如何避免一连串的委托调用
- kotlin - 如何从多项式表达式中获取系数?
- r - 如何为超大向量创建数据框?
- haskell - 为什么 Prelude 中的 init 函数有两种定义?
- python - 向量乘法python
- android - Android AutoCompleteTextView - 显示或隐藏建议弹出窗口时的侦听器