容器没有熬到码头上 - 组成

时间:2017-11-22 02:21:28

标签: python docker rabbitmq docker-compose

编写RabbitMQ的简单生产者/消费者示例,我无法让我的消费者容器继续在 if (guessedNumber < randomNumber) { System.out.println("The number is bigger"); } else if (guessedNumber > randomNumber) { System.out.println("The number is smaller"); } else{ x++; } 上运行。它应该在无限循环上运行。

enter image description here

正如您所见,我可以在运行docker-compose up -d以及docker-compose run consumer

时保持这种状态

app.py

docker-compose run -d consumer

正如您所看到的那样,这是相当直接的。基本上从RabbitMQ文档复制它。在写了大部分内容之后我跑了#!/usr/bin/env python import argparse import pika import json connection = None channel = None TYPES = ['producer', 'consumer'] def producer(): global connection, channel connection = pika.BlockingConnection(pika.ConnectionParameters('rabbit')) channel = connection.channel() channel.queue_declare(queue='hello') # Currently a python dict data = { 'key': 'myvalue' } channel.basic_publish(exchange='', routing_key='hello', body=json.dumps(data)) # Encode as a JSON string print(f' [x] Sent {data}') connection.close() def consumer(): global connection, channel connection = pika.BlockingConnection(pika.ConnectionParameters('rabbit')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): data = json.loads(body) # decode JSON string into a python dict print(f' [x] Received: {data} type {type(data)}') channel.basic_consume(callback, queue='hello', no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') # Infinite loop try: channel.start_consuming() except KeyboardInterrupt: print('\nExiting...') def main(): parser = argparse.ArgumentParser() parser.add_argument('type', help='producer/consumer') args = parser.parse_args() client_type = args.type.lower() if client_type not in TYPES: print(f'{client_type} is not a valid type {TYPES}') elif client_type == TYPES[0]: producer() elif client_type == TYPES[1]: consumer() if __name__ == '__main__': main() 并获得了以下内容。

enter image description here

这表明它无法在初始构建时连接。即使在初始构建之后运行docker-compose logs consumer,它也无法熬夜。

搬运工-compose.yml

docker-compose up

我使用version: '3' services: producer: build: . consumer: build: . depends_on: - rabbit command: example consumer rabbit: image: rabbitmq:3.6 ,因为我认为应该确保在RabbitMQ服务之后构建消费者服务。

代码回复是here

1 个答案:

答案 0 :(得分:0)

您是否尝试使用consumer关键字为restart容器设置重启策略?在这些情况下经常发生的情况是,您的应用程序在该服务运行之前尝试连接到后端服务(在本例中为RabbitMQ)并且一切都会爆炸。如果您设置了重启策略,则docker将自动重启容器,希望此时您的后端服务将启动并运行。

有一些更为优雅的方法可以做到这一点,但在最简单的形式下,这对你有用。

您可以通过重新启动消费者容器并查看其是否保持正常来测试我的理论。

docker-compose restart consumer