首页 > 解决方案 > 无法将消息发布到云 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"

标签: pythongoogle-cloud-pubsubgoogle-cloud-iam

解决方案


推荐阅读