如何告诉python使用者等待客户端启动
Posted
技术标签:
【中文标题】如何告诉python使用者等待客户端启动【英文标题】:How to tell python consumer to wait for client to bootup 【发布时间】:2021-12-01 08:45:14 【问题描述】:我在 docker 容器中有一个基本问题,当我尝试开始创建和启动两个图像时,第二个图像(python 和一些脚本)依赖于第一个图像。
这会导致第二张图片出错并停止。如何通过我的python脚本在客户端消费,等待客户端启动?
我认为这个问题不一定是 Apache Pulsar 问题,但这里有一些文档供感兴趣的人参考
Apache Pulsar standalone
python api docs
客户端上的消费者
import pulsar
def initialize_consumer():
client = pulsar.Client('pulsar://localhost:6650')
consumer = client.subscribe('my-topic', 'my-subscription')
while True:
msg = consumer.receive()
try:
output_string = f"Received message msg.data() id=msg.message_id()"
print(output_string)
with open('./output.txt', 'a') as f:
f.write(output_string + '\n')
# Acknowledge successful processing of the message
consumer.acknowledge(msg)
except:
# Message failed to be processed
consumer.negative_acknowledge(msg)
client.close()
【问题讨论】:
你已经尝试过什么? Docker Compose wait for container X before starting Y 中的任何建议对您有帮助吗? 是的,确实如此。我实际上只是从那个对我有用的线程中实现了一个解决方案。我很快就会在这里发布我的“解决方案”。 【参考方案1】:这个帖子帮助了我,因为我遇到了一个 Docker 特定的问题:Docker Compose wait for container X before starting Y
我基本上为我的standalone
图像添加了一个healthcheck
,然后为我的conprod
图像使用了restart: on-failure
,这似乎有效。
我仍然对上述实际消费者函数中以 python 为中心的解决方案感兴趣。
docker-compose.yaml
文件最终看起来像这样:
version: '3.8'
services:
standalone:
hostname: standalone
container_name: standalone
image: apachepulsar/pulsar:2.8.1
ports:
- 8080:8080
- 6650:6650
command: bin/pulsar standalone
healthcheck:
test: ["CMD", "nc", "-vz", "localhost", "6650"]
interval: 20s
timeout: 5s
retries: 5
networks:
- conprod
conprod:
hostname: conprod
container_name: conprod
build:
context: .
dockerfile: ./Dockerfile
ports:
- 80:80
restart: on-failure
depends_on:
- standalone
networks:
- conprod
networks:
conprod:
【讨论】:
以上是关于如何告诉python使用者等待客户端启动的主要内容,如果未能解决你的问题,请参考以下文章