Python瓶鼠兔消费者(RabbitMQ)

2024-06-12 04:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个小的

Python Flask

应用程序

  1. Appone-->制作人
  2. Apptwo-->消费者

两者都在不同的docker-container中,由docker-compose编排

我不能从生产者获取数据给消费者……即使我在apptwo中启动start.consuming(),生产者也不能向RabbitMQ代理发送任何数据 也许有人能帮我。非常感谢

docker编写:

version: '3'
services:

  appone:
    container_name: appone
    restart: always
    build:
      context: ./appone
      dockerfile: Dockerfile
    environment:
      FLASK_APP: ./app.py        
    volumes:
      - './appone:/code/:cached'
    ports:
      - "5001:5001"

  apptwo:
    container_name: apptwo
    restart: always
    build:
      context: ./apptwo
      dockerfile: Dockerfile
    environment:
      FLASK_DEBUG: 1
      FLASK_APP: ./app.py         
    volumes:
      - ./apptwo:/code:cached 
    ports:
      - "5002:5002"     

  rabbitmq:
    image: "rabbitmq:3-management"
    hostname: "rabbit"
    ports:
      - "15672:15672"
      - "5672:5672"
    labels:
      NAME: "rabbitmq"
    volumes:
      - ./rabbitmq/rabbitmq-isolated.conf:/etc/rabbitmq/rabbitmq.config

appone(制作人)

^{pr2}$

apptwo(消费者)

from flask import Flask
from flask_restful import Resource, Api
import pika
from threading import Thread

app = Flask(__name__)
api = Api(app)

app.config['DEBUG'] = True

data = []

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='rabbitmq'))

channel = connection.channel()

channel.queue_declare(queue='hello', durable=True)

def callback(ch, method, properties, body):
    data.append(body)
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_consume(queue='hello', on_message_callback=callback)

thread = Thread(channel.start_consuming())
thread.start()

class HelloWorld(Resource):
    def get(self):
        return {'message': data}

api.add_resource(HelloWorld, '/api/apptwo/get')

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=5002)

目标 在这个简单的例子中,我只想接收apptwo中的数据并将其存储在数据列表中。。。在

再次感谢!!在


Tags: 数据dockernameimportappflaskcontainerchannel