0

我在 docker 容器中有一个基本问题,当我尝试开始创建和启动两个图像时,第二个图像(python 和一些脚本)依赖于第一个图像。

这会导致第二个图像出错并停止。如何采用我的 python 脚本在客户端使用,等待客户端启动?

我认为这个问题不一定是 Apache Pulsar 问题,但这里有一些文档供感兴趣的人使用

Apache Pulsar 独立

python api文档

客户端上的消费者

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()
4

1 回答 1

0

这个线程帮助了我,因为我有一个 Docker 特定的问题:Docker Compose 在启动 Y 之前等待容器 X

我基本上为我的图像添加了一个healthcheckstandalone然后restart: on-failure为我的图像使用了conprod,这似乎有效。

我仍然对上面实际的消费者函数中以 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:
于 2021-10-12T23:11:54.090 回答