import pikaimport jsonimport loggingimport base64from rest_framework.exceptions import ParseErrorfrom django.core.management.base import BaseCommandfrom device.access_device import parse_access_device_imagelogger = logging.getLogger('server.default')class Command(BaseCommand): help = 'Get the value from the message queue and write to queue' def handle(self, *args, **options): obj = RabbitQueue() queue_name = '_image' obj.pop_queue(queue_name=queue_name)class RabbitQueue: def __init__(self): self.username = 'admin' self.password = 'admin' self.host = '127.0.0.1' self.port = 5672 self.channel = None def connect(self): credit = pika.PlainCredentials(username=self.username, password=self.password) self.channel = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, port=self.port, credentials=credit)).channel() @staticmethod def callback(channel, method, properties, body): receive = json.loads(body.decode()) try: device_name = receive['device']['detail'] device_address = receive['device']['scene'] image = base64.b64decode(receive['image']) username = receive['user']['name'] phone = receive['user']['username'] gender = '男' if receive['user']['gender'] == 1 else '女' parse_access_device_image(device_name=device_name, device_address=device_address, image=image, username=username, phone=phone, gender=gender) except ParseError: logger.error(receive) raise ParseError('ParseError...') def pop_queue(self, queue_name, timeout=0): """从消息队列获取数据""" self.connect() channel = self.channel channel.queue_declare(queue=queue_name, durable=True) channel.basic_consume(on_message_callback=self.callback, queue=queue_name, auto_ack=False) channel.start_consuming()