NServiceBus
NServicebus = abstraction over een service bus broker.. voorkeur masstransit
endpoint configuration = basis, geef je naam, gewoon logische naam, bijv "Sales".
endpoint serialization -> welke serializer moet gebruikt worden
endpoint transport = medium dat de messages transporteert (memory, azure service bus, rabbitmq, etc). LearningTransport is een memory implementation. Dus de berichten gaan nu via het geheugen.
endpointInstance = Endpoint.start(endpointConfiguration)
-> start de service, een background service
Nservicebus kent 3 soortenm messages
1. command: 1 of meerdere senders, altijd 1 receiver. Doel is om een plek iets te laten doen. naming is dan: PlaceOrder, DoSomething
2. event: pub sub scenario: 1 sender, meerdere receivers. Doel: laat de wereld weten dat er iets is gebeurt: OrderPlaced, UserLoggedIn
3. message: voor alle overige berichten, bijv een reply op een request/response
public class ExampleCommand : ICommend
{}
later in code te gebruiken om te versturen:
var command = new ExampleCommand()
// SendLocal gebruik je niet in productie, alleen voor dev en demo
await endpointInstance.SendLocal(command)
Command handler:
public class ExampleCommandHandler : IHandleMessages<ExampleCommand>
{
}
IMessageSession kan je injecteren in je classes als je iets wilt publiseren (pub sub / events)
messageSession.Send(<instantie van ICommand>);
Als je iets probeert te senden bij een command, maar er is geen ontvanger gedefinieerd, krijg je een exception
Dit los je op door:
1. routing te specificeren / configureren: Welke type command wordt door welke endpointconfiguratie afgehandeld
routing.RouteToEndpoint(typeof(ExampleCommand), "Sales")
2. een handler te maken
-> erevn van IHandleMessages<ExampleCommand>
Bij het publishen van een event (pub/sub) heb je geen routing nodig
Reacties
Een reactie posten