Stream

A plataforma Devprime simplifica a integração de forma transparente com os principais serviços de stream, tais como Kafka, RabbitMQ, Google GCP, AWS SQS e Azure Service Bus, permitindo alterações sem a necessidade de modificar uma única linha de código. Além disso, oferece suporte a estratégias de sistemas distribuídos como retry, circuit break e resiliência.

O Adapter de Stream organiza a emissão e recebimento de eventos na plataforma Devprime seguindo um protocolo padrão da Devprime e também habilita o recebimento de eventos genericos enviados por outras aplicações.

Enviando eventos RabbitMQ / Kafka e outras plataformas
“A plataforma Devprime disponibiliza uma abordagem padronizada para a emissão de eventos usando o Adapter de Stream e o método Dp.Stream.Send(destination, eventName, eventData). Esse método é independente da tecnologia utilizada, permitindo inclusive a troca entre serviços de streaming, como RabbitMQ, Kafka e outras plataformas.

No exemplo abaixo, um DTO OrderCreatedEventDTO é preenchido com o payload a ser transmitido no evento, e então é executado o método Dp.Stream.Send(destination, eventName, eventData).

O parâmetro ‘destination’ representa a fila, tópico ou exchange; ‘eventName’ é o nome do evento; e ‘eventData’ representa o conteúdo a ser transmitido.”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class OrderCreatedEventHandler : EventHandler<OrderCreated, IOrderState>
{
    public OrderCreatedEventHandler(IOrderState state, IDp dp) : base(state, dp)
    {
    }
    public override dynamic Handle(OrderCreated orderCreated)
    {
        var success = false;
        var order = orderCreated.Get<Domain.Aggregates.Order.Order>();
        var destination = Dp.Settings.Default("stream.orderevents");
        var eventName = "OrderCreated";
        var eventData = new OrderCreatedEventDTO()
        {ID = order.ID, CustomerName = order.CustomerName, 
        CustomerTaxID = order.CustomerTaxID, Total = order.Total};
        Dp.Stream.Send(destination, eventName, eventData);
        success = true;
        return success;
    }
}

Hub de eventos no Adapter de Stream para filas/tópicos

O recebimento de eventos por meio de filas ou tópicos é um processo simples e transparente através do adaptador de Stream. Esse processo funciona independentemente da tecnologia de Stream adotada, seja ela RabbitMQ, Kafka ou qualquer outro serviço. Após receber o evento, o Stream o direciona para os ‘Application Services’, que por sua vez o encaminha para o ‘Domain’. Este último é o único responsável por processar a regra de negócios.

Dessa forma, a plataforma Devprime garante que o fluxo de eventos seja conduzido de maneira eficiente e coerente, garantindo a integridade das operações e mantendo a clareza na execução das regras de negócio.

No exemplo abaixo o microsserviço de Payment está recebendo o evento “OrderCreated” e na sequeência repassando o processamento para o “Application Service” paymentService.

Os eventos padrões entre aplicações baseadas na plataforma Devprime são tratados de forma padronizada conforme demostrando no exemplo abaixo ‘OrderCreated’.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class EventStream : EventStreamBase, IEventStream
{
    public override void StreamEvents()
    {
        Subscribe<IPaymentService,
         OrderCreatedEventDTO>("Stream1", "OrderCreated",
         (dto, paymentService, Dp) =>

        {
            var command = new Payment()
            {
                CustomerName = dto.CustomerName,
                OrderID = dto.OrderID,
                Value = dto.Value
            };
            paymentService.Add(command);
        });
    }
}

Protocolo automático no evento de eventos
O Adapter de Stream utiliza um protocolo padrão para o envio de eventos, que gerencia informações como versão, rastreabilidade, parâmetros de identificação, data de criação e o payload. Essas informações são visíveis nas filas ou tópicos das ferramentas de streaming e transparentes para os desenvolvedores. Internamente, eles recebem eventos padronizados e tipados na plataforma Devprime.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{"Headers":{"trace-id":"6a61dd3e4296ba544e9eb7f1dec3ebab:ef6501c0445a44e5"},
"Id":"e3d69575-aaac-4f20-92b9-b8e413ba5b38",
"CorrelationId":"99f3b318-c8f5-4dc7-85a3-297146855015",
"TraceId":"99f3b318-c8f5-4dc7-85a3-297146855015",
"AppId":"8be817a8-0dfc-41be-b9aa-607311ffe9fb",
"AppName":"ms-order", "TenantID":"","TenantUserID":"",
"Version":1,"Name":"OrderCreated",
"CreationDate":"2023-09-01T12:40:24.2028489-03:00",
"Payload":{"ID":"62d3e0a6-7bdf-4b40-ab13-fce02f90f392",
"CustomerName":"Ramon","CustomerTaxID":"string","Total":0}}

Assinando um evento

A plataforma Devprime oferece um CLI que impulsiona a produtividade do desenvolvedor de software em todas as etapas e disponibiliza o comando “dp add subscribe”, que agiliza a implementação de um novo Subscribe no Hub de eventos de Stream.

Última modificação September 9, 2023 (8e6a790b)