Рубрики
Без рубрики

AWS SQS / SNS | Parte 2 |. Publicando UMA Mensagem через SNS

Este Texto Faz Parte de Uma Série, Veja Também Os Automos Textos Dessa Série: Applynando Mensager … Помечено с AWS, микросервисами, Python, Sns.

ESTE Teamo Faz Parte de Uma Série, Veja Também OS Automos Textos Dessa Série:

  • Axtryando Mensageria Pub/Sub Com Python, AWS SNS E SQS | Parte 1.

  • Publicando UMA Mensagem Utilizando AWS SNS | Parte 2.

  • AWS SQS/SNS | Parte 3 |. Помимоиды Filas SQS USANDO Python

  • AWS SQS/SNS | Parte 4 |. Afinal, o que são как мертвая буква очереди?

Dando Continuidade Na Séri Sobre O U USO DA AWS SQS E SNS, Hoje Ambolesearemos A T Funcallidade Para Publitação de Mensagens Utilizando Sns, e Como Utilizar o Recurros de Filtros Dos Serviços SNS. DE MODO MAIS RUNDUTORIO, Resolvi Fazer Duas Appleações Read Utilizando Django E Django Read Framework, Que Serão OS Serviços de Ecommerce E Payment_gateway que nao Posuem Comunicação Direta E Realizam Comunicação Utilizando Tópicos E Filas.

No Geral Essas Applicações Репрезентам operações e Plachamentos Que Podem Ocorerer EM Serviços Mais Complections, OS Serviços São Para Simular API De Ecommerce. Quero Ressaltar que estear o funcionamento do django de explicaar o funcionamento do django deastrand frame outs outivo o código desenvolvido nesse projeto foi o mais shries tossível e Apenas Funcally O Suficate Para A itilização Das Funcionalidades de Fila Burnária.

Pois Bem, Vamos Cateçar.

Nesse Projeto Exemplo, Imaginei Um Cenário Onde Temos TemoS UM Serviço Repainio Emommerce Pelo Processamento DA API Ecommerce, Nesse Serviço Teremos Rota Get de listagem de produtos Proponíveis e Qual o Prosendeor Daquele Produuto, Também Teremos UMA Rota Post Para Criação de UM Pedido de Compra. NA OUTRA PONTA TEMOS O Serviço Repaintavel Pelo Processamento Do Pagento, O Que Eu Chamei de Production Gateway, Esse Pagiço Irá Chamei De Playidade de Pedidos Processados Pelo Serviço Ecommerce, e Irá Através de Uma Rota Get Exibir A Cantidade Arrecadada de Pedido Para Cada Vende.

О Código Desenvolvido Nesse Projeto Poderá Ser Encontrado Акхи Отказ

QuAnto O Serviço Cerebe Bea Prema Solicitação de Pedido de Compra, Appiação Realiza OS Processamentos que Precisa Para Sua Execução. UMA VEZ Que o Processo Foi Celliousado, Applação Irá Disparar UMA Mensagem Para O Tópico Sns.

def create(self, purchase_data):
        purchase = Purchase()

        products_pk = [product["id"] for product in purchase_data['products']]
        products_list = list(self.product_domain.get_all(query_params={'pk__in': products_pk}))
        purchase.total_price = self.__calculate_total_price(products_list)

        # salvar o objeto
        purchase = self.repository.create(purchase)

        # salvar os relacionamento ManyToMany
        purchase.product.add(*products_list)
        self.repository.update_m2m(purchase)

        # disparar mensagem para tópico SNS
        self.__notificate_transaction_sns(purchase)

        return purchase

Mensagem Que Applação Irá Envide VAI SEL UM JSON CONTENDO O Identialador DO VANDESSOR, DATA DA COMPAA, O Valor Total Que Aquela Complea Para Aquele Lojista E UM Идентификатор Индиндо Acqua Comsa resses dados SE.

def __notificate_transaction_sns(self, purchase, seller_id):
        products = purchase.product.all()
        message = {
                    "seller" : str(seller_id),
                    "purchase_date" :  purchase.created_at.strftime("%Y-%m-%d %H:%M:%S %Z"),
                    "purchase_id" : str(purchase.pk),
                    "total_price" : str(purchase.total_price)
        }

        # Chama a classe de domínio que faz conexão com a AWS SNS
        self.sns_connection.publish_message_to_subscribers(settings.TRANSACTION_TOPIC_SNS, json.dumps(message))

Countertar UMA Mensagem Em Um Tópico Sns é Muito Smisto, Para UMA Configuração Mínima Vovisa Passar apens o Código arn do tópico e Mensagem Em Questão. Mensagem Pode Estar Em Qualkquer Padrão ReperiDi Para o Projeto, Nesse Exemplo Estou Utilizando O Envio Dem Um Json Como Mosterado Ansiormente.

Vale LembraR que o Código Arn do Tópico Foi Bootito Durante Criação do Mesmo, o Códanco de Criação do Tópico E insnanciação do Clients Sns Está da insponível na parte 1 dessa série.

def publish_message_to_subscribers(self, topic_arn, message, message_attributes={}):
        publish = self.sns_client.publish(
                                            TopicArn=topic_arn,
                                            Message=message,
                                            MessageAttributes = message_attributes
                                        )
        return publish

Esse Código É Tudo O Que Precisa Para Poder Enciar UMA Mensagem Para Todos OS USTRITOS DO TOPICO, LEMBRANDO TAMPÉM QUE É TOUPLEVEL COMO CONTAS DE EMM TOUMEROS DE TELEFONE COMO INCRITOS DEM TOPICO, DESSE MODO TODOS ELES REACHERIAM Igualmente Mensagem Disparada SEM HAVER Необязательный де adicionar um Parâmetro Mais без Envio. COMO Visto Na Parte 1 Dessa Série, apenas adicionei uma fila sqs como um iscrito desse tópico, logo ela foi quem quembeu a mensagem que foi disparada POR ESSE TRECHO de Código Egora Nós iRemos Povizi-la.

MAS LEMBRAM QUE EU FALEI ANDOODERMENTE Que UM TOPICO PORE TER N InScritos E Que Eles Podem Ser Do Tipo SQS, напишите OU SMS? Представьте себе que no nosso tópico ao inn incess de uma única aqueue, Генду Тивье Tivesse duas queue Inscrita E APTAS Para Thumberem Mensagens, E Vamos Imaginar Também Que a Na Verdade Gostaríamos Nesse Cenário de Mandar As Mensagens Para ума Очередь им Específica. Isso ésíval através da utilização dos filtros sns, mas como funciona?

Toda Vez Que É Disparado o Envio de Mensagens Através Da Snss, POR PADRãOO O SERVIZO JA VERIFYA SE EASEE UMA POLíICA DE FILTRO TEATHATETE PARA ALGUM INCRITO, CASO TENHA ELA VERICEA SE O FILTRO DESITO NOS ATRIBUTOS DA MENSAGEM BATE COM ALGUM DOS FILTROS ENCONTRADOS NAQUELE TOPICO Отказ NoS Casos Onde Não Há Filtro, SNS Dispara Mensagem Para Toos OS Seus Inscritos Sem Ter Nenhuma Diferenciação. Configuração Do Filtro É Atribuído No Momento Da Inscrição, Desse Modo, Voltando Ao Código Publicado Нет Texto Передние Iremos Pegar A Váriivel Paymage_subscription E Configurarar Essa Inscrição.

sns_cliente.set_subscription_attributes(
    SubscriptionArn = payment_subscription['SubscriptionArn'],
    AttributeName ='FilterPolicy', 
    AttributeValue ='{"event_type": ["order_placed"]}'
)

Нет Código Acima, Gente Chama Novamente o Clients SNS InstanciaDo Utilizando O Boto3 E Chammos Para Atcualizar OS Atributos Da Inscrição. ADICIONEMOS UM NOVO ATRIBUTO PARA ESSA INSCRIçço em Escesífico, e Gente Garante Isso Através Do Código Arn Da Inscrição Da Fila Платеж, Que é Fila Que Vai Ser Complyida Pelo Serviço Progly Proysegate Proysgeway Do Meu Exemplo. O Atributo EM Questão é Uma Política de Filtro, Onde AdiCionamento UM Dicionário Contendo A Cinalizando que ém Em Tipo de Evento E o Seu Valor ém Armay one oom dos filtros ApplipaDos.

Vale Ressaltar Que Esse Array Conter 1 Conter 1 OU Mais Esceptificações de Filtro, E UMA Mensagem Será Enviada Para Esta Inscrição Caso O Atributo Da Mensagem Seja Consocenente Com Ao Menos 1 Filtro Atribuído. Сравненная реализация PELA AWS é Booleana, OU Seja, Ou Exatamente Igual Oou Não, Dessa Forma Os Filtros São Sensitve.

Para Encivir UMA Mensagem Comm TiLTRO EM ESSICEFICO, Nós Iremos Reecrever Tunção de Notificate_Transaction_sns Para Atribuirmos Asepecificação do Filtro Nos Atributos da Mensagem.

def __notificate_transaction_sns(self, purchase, seller_id):
        products = purchase.product.all()
        message = {
                    "seller" : str(seller_id),
                    "purchase_date" :  purchase.created_at.strftime("%Y-%m-%d %H:%M:%S %Z"),
                    "purchase_id" : str(purchase.pk),
                    "total_price" : str(purchase.total_price)
        }

        message_attributes = {
            'event_type': {
                'DataType': 'String',
                'StringValue': 'order_placed'
            }
        }

        self.sns_connection.publish_message_to_subscribers(settings.TRANSACTION_TOPIC_SNS, json.dumps(message), message_attributes)

E VOILA, MENSAGEM SERA ENVIADA APENAS PARA O Inscrição que Osua o Filtro Undery_placed Atribuída.

Na Parte 2 Dessa Séri Nós Vemos Como Completar Mensagens Através do Serviço SNS, Vimos Como Pode Ser Assurdamente Prático E Vimos Também Como Utilizar ОС Фильтрос Ао Носпо одолжение. NoS Proximos Textos Da Série Advailando AWS SQS E SNS IREMOS VER COMO COMO COMOIR Как Mensagens Que EnviMos Hoje, E Vamos Descobrir Também Sobre O Conceito DAS Dead Please Oneue. Vejo vovê lá!

Оригинал: “https://dev.to/mchdax/publicando-uma-mensagem-utilizando-aws-sns-parte-2-1m8”