я новичок в шаблоне микросервисов, и у меня есть приложение 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