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
.