- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行以大约每秒一条消息的速度处理传入消息的 pubsub 消费者。事情通常运行良好,但是,每隔几天或几小时,我们偶尔会看到 pubsub 模块内部线程抛出的异常,我不清楚如何捕获它们。这是一个典型的例子(也有其他类似的痕迹,但消息略有不同):
Exception in thread Thread-LeaseMaintainer:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 57, in error_remapped_callable
return callable_(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 549, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/usr/local/lib/python3.6/site-packages/grpc/_channel.py", line 466, in _end_unary_response_blocking
raise _Rendezvous(state, None, None, deadline)
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "channel is in state TRANSIENT_FAILURE"
debug_error_string = "{"created":"@1554568036.075280756","description":"channel is in state TRANSIENT_FAILURE","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":2294,"grpc_status":14}"
>
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/google/api_core/retry.py", line 179, in retry_target
return target()
File "/usr/local/lib/python3.6/site-packages/google/api_core/timeout.py", line 214, in func_with_timeout
return func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc), exc)
File "<string>", line 3, in raise_from
google.api_core.exceptions.ServiceUnavailable: 503 channel is in state TRANSIENT_FAILURE
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/subscriber/_protocol/leaser.py", line 146, in maintain_leases
[requests.ModAckRequest(ack_id, p99) for ack_id in ack_ids]
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/subscriber/_protocol/dispatcher.py", line 152, in modify_ack_deadline
self._manager.send(request)
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/subscriber/_protocol/streaming_pull_manager.py", line 268, in send
self._send_unary_request(request)
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/subscriber/_protocol/streaming_pull_manager.py", line 259, in _send_unary_request
ack_deadline_seconds=deadline,
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/_gapic.py", line 45, in <lambda>
fx = lambda self, *a, **kw: wrapped_fx(self.api, *a, **kw) # noqa
File "/usr/local/lib/python3.6/site-packages/google/cloud/pubsub_v1/gapic/subscriber_client.py", line 723, in modify_ack_deadline
request, retry=retry, timeout=timeout, metadata=metadata
File "/usr/local/lib/python3.6/site-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
return wrapped_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/google/api_core/retry.py", line 270, in retry_wrapped_func
on_error=on_error,
File "/usr/local/lib/python3.6/site-packages/google/api_core/retry.py", line 199, in retry_target
last_exc,
File "<string>", line 3, in raise_from
google.api_core.exceptions.RetryError: Deadline of 600.0s exceeded while calling functools.partial(<function _wrap_unary_errors.<locals>.error_remapped_callable at 0x7f86228cd400>, subscription: "projects/xxxxx-dev/subscriptions/telemetry-sub"
ack_deadline_seconds: 10
ack_ids: "QBJMJwFESVMrQwsqWBFOBCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRoHIGoKOUJdEmJoXFx1B1ALEHQoYnxvWRYFCEdReF1YHQdodGxXOFUEHnN1Y3xtWhQDAEFXf3f8gIrJ38BtZho9WxJLLD5-LDRFQV4"
, metadata=[('x-goog-api-client', 'gl-python/3.6.8 grpc/1.19.0 gax/1.8.2 gapic/0.40.0')]), last exception: 503 channel is in state TRANSIENT_FAILURE
Thread-ConsumeBidirectionalStream caught unexpected exception Deadline of 600.0s exceeded while calling functools.partial(<function _wrap_unary_errors.<locals>.error_remapped_callable at 0x7f86228cda60>, subscription: "projects/xxxxx-dev/subscriptions/telemetry-sub"
ack_deadline_seconds: 10
ack_ids: "QBJMJwFESVMrQwsqWBFOBCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRoHIGoKOUJdEmJoXFx1B1ALEHQoYnxvWRYFCEdReF1YHAdodGxXOFUEHnN1aXVoWxAIBEdXeXf8gIrJ38BtZho9WxJLLD5-LDRFQV4"
, metadata=[('x-goog-api-client', 'gl-python/3.6.8 grpc/1.19.0 gax/1.8.2 gapic/0.40.0')]), last exception: 503 channel is in state TRANSIENT_FAILURE and will exit.
(在这种特殊情况下,订阅者收到几个类似的错误并完全停止使用消息(主线程不退出);但是,在其他此类库错误的情况下观察到其他行为。)
我们的代码大致如下(经过一些简化):
client = pubsub_v1.SubscriberClient()
flow_control = pubsub_v1.types.FlowControl(max_messages=500)
future = client.subscribe(subscription_path, callback=callback,
flow_control=flow_control)
...
try:
future.result(timeout=1)
except pubsub_v1.exceptions.TimeoutError:
pass
except _Rendezvous as exc:
logger.error('Got Rendezvous error in subscriber. Retrying in 1s. '
f'Detail: {exc}')
# NEVER GET HERE
time.sleep(1)
continue
except RetryError as exc:
logger.error('Got RetryError in subscriber. Retrying in 1s. '
f'Detail: {exc}')
# NEVER GET HERE
time.sleep(1)
continue
except Exception as exc: # pylint: disable=broad-except
logger.exception('Got uncaught exception in subscriber or callback ...')
# NEVER GET HERE
任何异常分支都不会被采用。这让我认为异常发生在某些后台线程中,并且 future.result() 调用没有报告,尽管文档( GCP PubSub Docs )相反。我已经阅读了许多 github 问题,仔细阅读了文档,并搜索了与此相关的 SO 问题,但我一直无法找到真正捕获此类错误的解决方案。非常感谢任何帮助或建议。
版本:
最佳答案
应该没有必要捕获并处理这些内部错误。它们是图书馆与 Google Cloud Pub/Sub 服务的连接中的暂时性错误,图书馆本身应该处理它们。如果它没有——特别是如果它阻止在不重新启动的情况下接收更多消息,那么它就是一个错误,应该在 GitHub repo for the Python client library 中输入一个问题。 .
关于python - 如何在 python PubSub 订阅者中捕获内部/库线程中发生的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552606/
我正在用 Java 创建一组小部件,用于解码和显示在串行接口(interface)接收到的消息。 消息类型由唯一标识符定义。每个小部件只对特定标识符感兴趣。 如何对应用程序进行编程,以便将消息正确分发
我有以下代码,其中包含多个订阅。我需要实现的是这样的: 订阅activateRoute 以获取用户和产品数据。 返回商品数据后,使用商品数据订阅getSeller服务。 使用返回的卖家数据订阅 get
我已经使用 Fitbit 的 PHP 库 (www.disciplinexgames.com/fitbit) 在我的网站中成功集成了 FitBit api。它工作正常,但我现在想使用订阅 API,以便
在我的 Angular 7 应用程序中,我有下一个功能: getUserData(uid) { return this.fireStore.collection('users').doc(
我正在尝试在 Node 中实现发布/订阅模式,但不使用 Redis。功能应该是相同的;您可以发布到 channel ,订阅 channel 并收听数据(如果您已订阅);以下是 Redis 功能: pu
这是我当前的应用程序结构: /client/client.js /server/server.js collection.js 有 HTML 和 CSS 文件,但这些与我的问题无关。在将我的应用程序拆
我们正在使用OpenTok建立视频聊天室体验,并且在基本工作正常的同时,我发现当 session 室中有很多参与者发布音频时,本底噪声非常高。像Zoom这样的浏览器外解决方案似乎没有这种高水平的“白噪
RabbitMQ 是点对点还是发布-订阅?或者两者都取决于配置选项? 我一直在查看配置,它们似乎都支持点对点模型而不是发布-订阅。即消息一旦被消费就会从队列中删除,并且不可用于第二个消费者。 最佳答案
我是 Angular 6 和 ngrx 商店的新人。我尝试在从商店订阅数据后调度操作,但它会导致无限循环并使浏览器崩溃?我错了什么。我发现它使用 rxjs 的 do/tap 运算符但仍然不起作用的一些
这个问题已经有答案了: Property '...' has no initializer and is not definitely assigned in the constructor (37
这个问题已经有答案了: Property '...' has no initializer and is not definitely assigned in the constructor (37
我正在使用 Visual Studio 2017 v15.6.2 和 Azure Services Authentication Extension 为支持 MSI 的应用程序进行本地 azure 功
我想知道如何确定给定的 WC_Product 对象 $product 是否是订阅产品。 最佳答案 您可以使用他们的辅助函数,这可能是最完整的: if( class_exists( 'WC_Subscr
我正在研究使用服务器发送的事件作为支持 api 来实现“订阅”类型。 我正在苦苦挣扎的是接口(interface),更准确地说,是这种操作的 http 层。 问题: 使用原生 EventSource不
我会根据每个用户的订阅类型向我的用户发送通知。 例如: 用户 A 订阅了所有新闻文章 用户 B 订阅了所有评论 用户 C 订阅了网站上的所有新内容 我有一个每 5 分钟运行一次的脚本(除非该脚本仍在运
我正在使用 Ionic2/Angular2,并且需要使用参数 authData 调用函数,如下所示。 public auth: FirebaseAuth this.auth.subscrib
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我们现有的系统可以持续处理大量文件。粗略地说,每天大约有 300 万个文件,大小从几千字节到超过 50 MB。这些文件从接收到完成使用会经历几个不同的处理阶段,具体取决于它们所采用的路径。由于这些文件
我有一项服务,我使用 Paypal 订阅。 Paypal 有 webhooks。问题是我不知道我需要使用哪个,不知道用户是否为下个月付款。 我使用了 Billing subscription rene
我目前正在为一个网站整理一个处理脚本,遇到了一个我似乎无法找到明确答案的问题。 Paypal 的文档充其量是不确定的,我对 Paypal 的使用还不够多,无法从他们提供的信息中轻松辨别答案。 当通过
我是一名优秀的程序员,十分优秀!