Giter VIP home page Giter VIP logo

simple_queue's Introduction

Simple Queue

Pylint

Este projeto consiste em uma implementação simples apresenta o funcionamento de dois serviços.

Como funciona?

Inicialmente cada serviço roda de forma independente. É criada uma fila SQS e um tópico SNS que se inscreve na fila

sns_sqs_list = ['simple-queue']
sns = local_boto3(localstack_host='localstack').resource("sns")
sqs = local_boto3(localstack_host='localstack').resource("sqs")
sns_client = local_boto3(localstack_host='localstack').client('sns')
for sns_sqs in sns_sqs_list:
    sns.create_topic(Name=sns_sqs)
    sqs.create_queue(QueueName=sns_sqs)
    sns_client.subscribe(
        TopicArn=f'arn:aws:sns:us-east-1:000000000000:{sns_sqs}',
        Protocol='sqs',
        Endpoint=f'arn:aws:sqs:us-east-1:000000000000:{sns_sqs}')

Producer

O Producer se conecta ao SNS

sns = boto3.client('sns')
topic = json.loads(os.environ.get('COPILOT_SNS_TOPIC_ARNS'))

e publica uma mensagem no tópico que está inscrito na fila ao qual deseja enviar a mensagem.

message = {"message": f'Eu sou o produtor! Esta é a mensagem {uuid.uuid4()}!'}
response = sns.publish(
    TopicArn=topic.get('simple_queue'),
    Message=json.dumps(message)
)

Consumer

O Consumer se conecta a fila ao qual deseja receber a mensagem fica coletando mensagens da fila e apresentando no terminal.

sqs = local_boto3(localstack_host='localstack').resource("sqs")

queue = sqs.Queue(os.getenv('COPILOT_QUEUE_URI'))

Em seguida entra em loop para obter sequencialmente cada mensagem presente na fila para processá-la.

messages = queue.receive_messages(
    MessageAttributeNames=['All'],
    MaxNumberOfMessages=int(os.getenv('MAX_NUMBER_OF_MESSAGES')),
    WaitTimeSeconds=int(os.getenv('WAIT_TIME_SECONDS'))
)

for msg in messages:
    parse_message = json.loads(msg.body)
    message = json.loads(parse_message['Message'])['message']

Após processar a mensagem ela deve ser apagada para que não seja consumida novamente.

msg.delete()

simple_queue's People

Contributors

gusssoares avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.