django theader для ошибки очереди в rabbitmq - PullRequest
0 голосов
/ 20 июня 2019

я новичок в шаблоне микросервисов, и у меня есть приложение django, которое содержит представление, отправляющее сообщение, и потребление в узле js, вызывающее обработку сообщений и возвращающееся в приложение django.

Весь этот процесс связи завершенby rabbitmq.

когда http-запрос приходит в определенную конечную точку, приложение django отправляет сообщение в очередь, этот процесс работает

, чтобы получить ответ, который я думал о запуске theader, который используеточередь ответов.Я могу запустить theader, но клиент (django) закрывает соединение с rabbitmq

мое приложение готово

from django.apps import AppConfig
from rpc.rpc_queues import RcpOrder

class SaleConfig(AppConfig):
    name = 'sale'

    def ready(self):
        r = RcpOrder()
        r.daemon = True
        r.start()

мой интерфейс rpc

class RpcInterface(Thread):
    host = None
    queue = None

    def __init__(self):
        #cria conexao TCP
        self.connection = pika.BlockingConnection(
            pika.URLParameters(self.host)
        )
        #cria um canal virtual que server para o envio e consumo de mensagens
        self.channel = self.connection.channel()
        #declara a queue criando se for necessario
        result = self.channel.queue_declare(queue='', exclusive=True)
        self.callback_queue = result.method.queue
        super().__init__()

    def on_response(self, ch, method, props, body):
        #verifica se a mensagem foi para este consumer
        if self.corr_id == props.correlation_id:
            self.response = body

    def call(self, body):
        self.response = None
        #cria um id unico para a requesicao
        self.corr_id = str(uuid.uuid4())
        #envia uma mensagem basica
        self.channel.basic_publish(
            exchange='',
            routing_key=self.queue,
            properties=pika.BasicProperties(
                reply_to=self.callback_queue,
                correlation_id=self.corr_id,
            ),
            body=json.dumps(body)
        )

    def handle_response(self,data):
        """
        Metodo que lida com o retorno da response
        """
        raise NotImplementedError()

    def run(self):
        #inicia o consumo da queue para o processo do retorno da chamada
        self.channel.basic_consume(
            queue=self.callback_queue,
            on_message_callback=self.on_response,
            auto_ack=True
        )
        print('\n\n\n\n caiu aqui')

при запуске моего приложения djangoметод начала театра называется, я вижу в журнале rabbitmq:

api_shop_1     |  caiu aqui
api_shop_1     | Performing system checks...
api_shop_1     | 
rabbitmq_1     | 2019-06-20 19:08:01.764 [warning] <0.699.0> closing AMQP connection <0.699.0> (172.18.0.3:55142 -> 172.18.0.2:5672, vhost: '/', user: 'root'):
rabbitmq_1     | client unexpectedly closed TCP connection
api_shop_1     | System check identified no issues (0 silenced).
api_shop_1     | 
api_shop_1     | You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
api_shop_1     | Run 'python manage.py migrate' to apply them.
api_shop_1     | June 20, 2019 - 19:08:01
api_shop_1     | Django version 2.0.7, using settings 'api_shop.settings'
api_shop_1     | Starting development server at http://0.0.0.0:8000/
api_shop_1     | Quit the server with CONTROL-C.

Я не знаю, почему мой клиент закрыл соединение с rabbitmq: «клиент неожиданно закрыл соединение TCP».

этот кодмой проект: https://github.com/mandala21/microservices

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...