Personalizar o AWS Message Processing Framework para .NET - AWS SDK para .NET (V3)

A versão 4 (V4) do AWS SDK para .NET foi lançada!

Para começar a usar a nova versão do SDK, consulte o Guia do desenvolvedor AWS SDK para .NET (V4), especialmente o tópico sobre migração para a versão 4.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Personalizar o AWS Message Processing Framework para .NET

O AWS Message Processing Framework para .NET cria, envia e processa mensagens em três “camadas” diferentes:

  1. Na camada mais externa, o framework cria a solicitação ou resposta nativa da AWS específica de um serviço. Com o Amazon SQS, por exemplo, ele cria solicitações SendMessage e trabalha com os objetos Message definidos pelo serviço.

  2. Dentro da solicitação e resposta do SQS, o framework define o elemento MessageBody (ou Message para o Amazon SNS ou Detail para o Amazon EventBridge) como um CloudEvent formatado em JSON. Ele contém metadados definidos pelo framework que podem ser acessados no objeto MessageEnvelope ao processar uma mensagem.

  3. Na camada mais interna, o atributo data dentro do objeto JSON do CloudEvent contém uma serialização JSON do objeto .NET que foi enviado ou recebido como mensagem.

    { "id":"b02f156b-0f02-48cf-ae54-4fbbe05cffba", "source":"/aws/messaging", "specversion":"1.0", "type":"Publisher.Models.ChatMessage", "time":"2023-11-21T16:36:02.8957126+00:00", "data":"<the ChatMessage object serialized as JSON>" }

É possível personalizar a forma como o envelope da mensagem é configurado e lido:

  • "id" identifica a mensagem de forma exclusiva. Por padrão, ele é definido como um novo GUID, mas isso pode ser substituído implementando o seu próprio IMessageIdGenerator e injetando-o no contêiner de DI.

  • "type" controla como a mensagem é direcionada para os manipuladores. Por padrão, ele usa o nome completo do tipo .NET que corresponde à mensagem. Você pode substituí-lo por meio do parâmetro messageTypeIdentifier ao associar o tipo de mensagem ao destino via AddSQSPublisher, AddSNSPublisher ou AddEventBridgePublisher.

  • "source" indica qual sistema ou servidor enviou a mensagem.

    • Esse será o nome da função se estiver publicando do AWS Lambda, o nome do cluster e o ARN da tarefa se estiver no Amazon ECS e o ID da instância se estiver no Amazon EC2, caso contrário, um valor alternativo de /aws/messaging.

    • Você pode substituí-lo por meio de AddMessageSource ou AddMessageSourceSuffix no MessageBusBuilder.

  • "time" definido como o DateTime atual em UTC. Isso pode ser substituído implementando o seu próprio IDateTimeHandler e injetando-o no contêiner de DI.

  • "data" contém uma representação JSON do objeto .NET que foi enviado ou recebido como mensagem:

    • ConfigureSerializationOptions no MessageBusBuilder permite que você configure o System.Text.Json.JsonSerializerOptions que será usado ao serializar e desserializar a mensagem.

    • Para injetar atributos adicionais ou transformar o envelope da mensagem depois que a estrutura o cria, você pode implementar ISerializationCallback e registrar isso por meio de AddSerializationCallback no MessageBusBuilder.