Con la sezione messaging è possibile generare messaggi e handlers. Un handler è l’entry point che riceve i messaggi cui il microservizio è in ascolto e che altri microservizi inviano sulla coda. Un handler può gestire più messaggi.

La seguente sezione genererà due messaggi e un handler che li riceve entrambi:

messaging:
  handlers:
    - name: MyMessageHandler
      description: Handler of MyMessage1 and MyMessage2
      messages:
        - MyMessage1
        - MyMessage2
  messages:
    - name: MyMessage1
      description: My message 1
      fields:
        - name: id
          description: The id of the message
          type: uuid
        - name: name
          description: The name of the message
          type: string
    - name: MyMessage2
      description: My message 2
      fields:
        - name: id
          description: The id of the message
          type: uuid
        - name: name
          description: The name of the message
          type: string

Il codice generato è il seguente:

public class MyMessage1
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class MyMessage2
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class MyMessageHandler : IMessageHandler<MyMessage1>, IMessageHandler<MyMessage2>
{

}

Il compilatore obbligherà ad implementare il metodo HandleAsync per entrambi i messaggi:

public class MyMessageHandler : IMessageHandler<MyMessage1>, IMessageHandler<MyMessage2>
{
    public async Task HandleAsync(MyMessage1 message)
    {
        ...
    }

    public async Task HandleAsync(MyMessage2 message)
    {
        ...
    }
}

Per esporre gli handlers sugli endpoint dedicati alla ricezione dei messaggi, verranno generate le chiamate ai metodi:

services.AddMessageHandlers();

e

endpoints.MapMessageHandlers();

Il primo metodo, registra gli handlers come servizi (per cui sarà possibile utilizzare la Dependency Injection nella classe dell’handler). Il secondo metodo collega gli endpoint corrispondenti a ciascun messaggio con l’opportuno metodo dell’handler.

Per rendere possibile l’invio dei messaggi, è necessario configurare la sezione components includendo un component di tipo messagebus.