Árvore de páginas


Confira nesta sessão o passo a passo para configurar o sistema de mensageria.

Leia sobre o sistema de mensageria TNF

Antes de partir para a configuração, leia sobre o funcionando da mensageria TNF em (ADICONAR LINK)

Configure um novo Tópico

Adicione um ou mais tópicos para serem manipulados por uma Fila. 

Builder para criação de tópicos
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.

Configure uma fila e adicione seus Tópicos

Crie uma fila, defina seu comportamento e adicione os tópicos que serão manipulados.

ExchangeRouter via Builder
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();

Configure o ExchangeRouter e adicione as suas Filas

Agora que já temos a fila e seus tópicos, é hora de configurar um ExchangerRouter para fazer bind da fila.

ExchangeRouter via Builder
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.

Adicione flexibilidade configurando ExchangeRouter via arquivo

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.

ExchangeRouter via Builder
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.

Precisa do modelo de config file para o ExchangeRouter?

Use o arquivo abaixo como cola para criar o seu ExchangeRouter!

Modelo de Configuração de Mensageiria
{
	"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
}

Finalize com a configuração de Módulo

Primeiro de tudo, adicione as referências de assembly e o DependsOn(leia mais sobre Criação de Módulos e DependsOn) para os módulos de mensageria.

Assembly e DependsOn
// Using
 
(...)
using Tnf.App.Bus.Queue;
using Tnf.App.Bus.Client;
using Tnf.App.Bus.Queue.RabbitMQ;
using Tnf.App.Bus.Client.Configuration.Startup;
using Tnf.App.Bus.Queue.Enums;
(...)
 
// DependsOn
 
[DependsOn(
	(...)
		typeof(TnfAppBusQueueModule),
    	typeof(TnfAppBusClientModule),
    (...)

Erros comuns

Importante: É comum problemas na mensageria devido a problemas de configuração de módulos, principalmente relacionados ao DependsOn


Uma vez configurado as depenências do módulos, vamos configurar o serviço de mensageria.

Configuração de Módulo
// 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")))
	.Verify(this)
    .Run();

Criando Publicadores e Assinantes

Lembre-se: Um ExchangeRouter pode fazer bind para publicadores e assinantes ao mesmo tempo.

Reduza o acoplamento e linhas de código

Evite utilizar a configuração de filas utilizando ExchangeRouter via Build. Dê preferencia para configuração da mensageria utilizando arquivo físico de configuração para Exchange Router e Queues.
  • Sem rótulos