3 minutes
Microservice Project – Step 10
Table of Contents
Com a finalização do MS1, vamos criar o segundo microservice que será o responsável por criar a manipular as orders relacionada a um usuário. A arquitetura de pastas será semelhante ao microservice 1, contendo requirements, dockerfile, docker-compose, pasta de config e mais algumas coisas.
Na pasta raiz da aplicação MS-Application, vamos criar os seguintes arquivos:
MS-application
└───MS2
│ docker-compose-microservice2.yml
│ Dockerfile
│ main.py
│ requirements.txt
│
├───config
│ database_connection.py
│ rabbitmq_connection.py
│ __init__.py
Config
Como no primeiro microsserviço, os arquivos de conexão serão exatamente iguais, então apenas copiaremos e colararemos a pasta config para o MS2. Nela, deve conter database_connection.py e rabbitmq_connection.py para a conexão com os serviços.
Requeriments
No arquivo requeriments.txt ficarão todas as instalações de bibliotecas e framework que serão utilizados na aplicação do microservices. As bibliotecas devem ficar separadas por linha, visto que usaremos um comando para uma instalação recursiva.
psycopg2-binary
flask
pika
Comando para instalação:
pip install -r requeriments.txt
Docker-Compose
No arquivo docker-compose-microservice2.yml, iremos configurar a inicialização da imagem do serviço. Será feito o Build da imagem que criaremos posteriormente, apontado a Network que criamos juntamente aos serviços logo no início do projeto.
version: "3.7"
services:
microservice2:
build: .
networks:
- internal-network
networks:
internal-network:
external: true
Dockerfile
No arquivo Dockerfile configuraremos a imagem do microservice, contendo as variáveis de ambiente adequadas para o serviço. Diferente da imagem do python que usamos na API, no microservice precisaremos instalar a imagem completa do python, sendo ela: python:3.8.
FROM python:3.8
COPY . /app/
ENV HOST='10.0.0.25'
ENV HOST_DATABASE='10.5.0.11'
WORKDIR /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD python main.py
Main.py
O arquivo main.py será responsável por interceptar as mensagens enviadas para a fila de orders.
Primeiramente, devemos importar os arquivos de conexão com o postgres e rabbit. Após isso, criaremos a classe Main(), onde no método __init__, chamaremos as conexões com os servidores.
from config.database_connection import ConnectionDatabase
from config.rabbitmq_connection import ConnectionRabbitMq
from rabbitmq_controller.rabbit_worker import RabbitWorker
class Main():
def __init__(self):
self.PSQL = ConnectionDatabase()
self.RMQ = ConnectionRabbitMq()
self.RMQ_WORKER = RabbitWorker()
Feito isso, criaremos um método chamado consume_queue, que consumirá a fila que desejamos. Nesse caso será order, e posterior o consumo, irá disparar uma função para o processamento do dado recebido da fila. Nesse momento não iremos criar a função de processamento, porém iremos apenas nomeá-la no lugar correto.
Com o comando basic_consume consumiremos a fila order, e no on_message_callback será disparado a função para o processamento da informação recebida na fila.
Com o comando start_consuming, é processado o evento de I/O até que todos as mensagens sejam processadas.
def consume_queue(self):
self.RMQ.channel.basic_qos(prefetch_count=1)
self.RMQ.channel.basic_consume(queue='order', on_message_callback=self.RMQ_WORKER.callback)
print(' [⇄] Waiting for messages. To exit press CTRL+C')
self.RMQ.channel.start_consuming()
Finalizaremos com a chamada do método consume_queue para inicializar o serviço.
if __name__ == '__main__':
MA = Main()
MA.consume_queue()
Resumo
Nesse Step, criamos o microservice 2 para o processamento dos dados recebidos através da fila de order. Copiamos os arquivos de conexão database_connection.py e rabbitmq_connection.py do Microservice 1, visto que é a mesma conexão que precisaremos fazer. Também criamos o arquivo main.py que será o responsável por inicializar o serviço e disparar o método consume_queue, que como o próprio nome diz, consumirá a fila de usuários.
529 Words
2022-08-04 09:12