Confira nesta sessão o passo a passo para configurar o sistema de mensageria.
Adicione um ou mais tópicos para serem manipulados por uma Fila.
var personUpdatedEventTopic= TopicSetup.Builder .Factory() .Message(typeof(PersonUpdatedEvent)) .AddKey("Person.Updated.Event") .AddKey("Person.Event") .Build(); var personUpdatedEventTopic= TopicSetup.Builder .Factory() .Message(typeof(custumerCreditLimitChangedEventTopic)) .AddKey("Custumer.CreditLimit.*") .Build();
Contrato
Lembre-se: O nameof de uma classe é o Contrato entre quem publica e quem assina.
Crie uma fila, defina seu comportamento e adicione os tópicos que serão manipulados.
var queue = QueueSetup.Builder .Factory() .QueueName(new Bogus.Faker().Random.AlphaNumeric(8)) .QueueReliabilitySetup(r => r .AckIsMandatory(true) .AutoDeleteQueue(true) .MaxMessageSize(256) .PersistMessage(false) .Build()) .AddTopics(personUpdatedEventTopic) .AddTopics(custumerCreditLimitChangedEventTopic) .Build();
Agora que já temos a fila e seus tópicos, é hora de configurar um ExchangerRouter para fazer bind da fila.
var exchangeRouter = ExchangeRouter .Builder .Factory() .Name("ExchangeForTesting") .ServerAddress("127.0.0.1") .Type(Tnf.App.Bus.Queue.Enums.ExchangeType.topic) .QueueChannel(QueueChannel.Amqp) .Reliability(isDurable: false, isAutoDelete: false, isPersistent: false) .AddQueue(queue) .SetExclusive(false) .Build();
Salve o Exchange Router
O Builder de ExchangeRouter possui o método Save(), para salvarC em um arquivo físico a configuração do Exchange Router.
Para evitar configurações hardcoded, crie um arquivo de configuração, faça a paremetrização e adicione a sua leitura na criação do seu ExchangeRouter.
var exchangeRouter = ExchangeRouter .Builder .Factory() .Load($@"c:\path_arquivo_configuracoa\ExchangeRouter.json") .Build();
Template do arquivo de configuração Exchange Router
Para obter um template do arquivo de configuração do Exchange Router, crie um novo ExchangeRouter via Build e substitua o método Build() por Save(), para salvar um arquivo físico com a configuração do Exchange Router.
Use o arquivo abaixo como cola para criar o seu ExchangeRouter!
{ "Guid": "a8763d12-bd4d-48b7-bc22-13d90d780cce", "QueueChannel": 0, "ServerAddress": "127.0.0.1", "ExchangeRouterName": "ExchengeRouterModel", "ExchangeType": 2, "IsExclusive": false, "Queues": [{ "Guid": "da1e07e5-4870-400c-abe8-8670a63c4884", "QueueName": "PersonCreatedEvent", "Topics": { "PersonCreatedEvent": ["Person.Created.Event"], "PersonUpdatedEvent": ["Person.Updated.Event"] }, "QueueReliabilityModel": { "PersistMessage": false, "Ack": false, "MirroredQueue": false, "MaxMessageSize": 0, "UnknowingMessage": false, "AutoDeleteQueue": false } } ], "IsAutoDelete": false, "IsDurable": true, "IsPersistent": true }
A configuração do módulo é o últmo passo da configuração da Fila. No módulo será configurado os últimos componentes da fila, como instancia de IocManager e vínculo de ExchangeRouter para publicação e assinatura.
Criando Publicadores e Assinantes
Lembre-se: Um ExchangeRouter pode fazer bind para publicadores e assinantes ao mesmo tempo.
// typeof(TnfAppBusQueueModule), // typeof(TnfAppBusClientModule), Configuration.BusClientSetup() .SetIocManager(IocManager) .SetExchangeRouter("default", e => exchangeRouter) .AddPublishers(() => new PublisherListener(Configuration.BusClientSetup().GetExchangeRouterInstance("default"))) .AddSubscribers(() => new SubscriberListener(Configuration.BusClientSetup().GetExchangeRouterInstance("default"))) .Run();
Reduza o acoplamento e linhas de código