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}}
|
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)