当前位置: 首页 > 知识库问答 >
问题:

python - celery 进程如何做健康检查,判断 amqp 连接是不是断了?

於和志
2023-11-01

把 celery 进程部署在 k8s 的时候如何做健康检查?

一般的 fastapi、flask 可以使用 HTTP 访问判断是不是健康,但是 celery 没有这样的接口

共有1个答案

万明辉
2023-11-01

celery 进程可以通过以下方式进行健康检查:

  1. 使用 ping 方法检查 AMQP 连接是否正常:
from celery import Celeryapp = Celery('myapp', broker='pyamqp://guest@localhost//')app.ping()  # 如果连接正常,将返回 True
  1. 可以通过捕获异常来判断 AMQP 连接是否断开:
from celery import Celeryapp = Celery('myapp', broker='pyamqp://guest@localhost//')try:    app.send_task('tasks.add', args=[4, 4])except Exception as e:    # 处理异常,例如记录日志或重新连接    print(f"Error occurred: {e}")

在 Kubernetes 中进行 Celery 进程健康检查的方法如下:

  1. 在 Kubernetes 中,可以使用 liveness 探针来检查容器是否健康运行。对于 Celery 进程,可以在容器中运行一个定时任务来检查 AMQP 连接是否正常,并在发现问题时重启容器。例如,在 Dockerfile 中添加以下命令:
CMD [ "python", "-c", "import celery; celery.ping()" ]
  1. 在 Kubernetes 部署文件中添加 liveness 探针的配置:
apiVersion: v1kind: Podmetadata:  name: my-celery-podspec:  containers:    - name: my-celery-container      image: my-celery-image      ports:        - containerPort: 5672  # AMQP 端口号      livenessProbe:        httpGet:          path: /health  # 健康检查路径,可以自定义为其他路径          port: 8000  # 健康检查端口号,可以根据实际情况调整        initialDelaySeconds: 10  # 延迟时间,可以根据实际情况调整        periodSeconds: 5  # 检查间隔时间,可以根据实际情况调整
 类似资料:
  • 问题内容: 我希望我的python应用程序能够知道另一侧的套接字何时被删除。有办法吗? 问题答案: 这取决于您所说的“丢弃”。对于TCP套接字,如果另一端通过close()或进程终止来关闭连接,则可以通过读取文件结尾或读取错误来找出错误,通常将errno设置为“对等”由您的操作系统决定。对于python,您将读取长度为零的字符串,否则将导致套接字。尝试从套接字读取或写入时将引发错误。

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 问题内容: 我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定玩家何时使用套接字API断开连接。 呼叫已断开远程似乎总是返回一个插座上。同样,调用已远程关闭的套接字似乎总是会返回。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地通过

  • 问题内容: 使用控制台,如何确定sidekiq是否已连接到Redis服务器?我希望能够做这样的事情: 问题答案: 您可以使用Sidekiq提供的Redis信息: 从Sidekiq的Sinatra状态应用程序中获取了它。

  • 问题内容: 基本上,我有一个服务器循环,用于管理与一个单独客户端的连接。在循环的某一时刻,如果存在ClientSocket,它将尝试读取以检查客户端是否仍然连接: 问题是,一旦创建了套接字,应用程序将挂起读取,我假设正在等待永远不会到来的数据,因为客户端永远不会发送到服务器。在此之前还可以,因为正确处理了断开连接(客户端断开连接后读取将最终失败),并且循环将尝试重新建立连接。但是,我现在添加了上面

  • 本文向大家介绍如何判断是函数还是方法?相关面试题,主要包含被问及如何判断是函数还是方法?时的应答技巧和注意事项,需要的朋友参考一下 看他的调用者是谁,如果是类,就需要传入一个参数self的值,这时他就是一个函数, 如果调用者是对象,就不需要给self传入参数值,这时他就是一个方法 print(isinstance(obj.func, FunctionType)) # False print(isi