J'essaie d'écouter la file d'erreurs pour traiter les messages ayant échoué, mais je n'arrive pas à faire en sorte que MassTransit ne mette pas les liens sur le message que je veux écouter dans la configuration. La configuration est ci-dessous et utilise v3 de MassTransit:Comment puis-je empêcher MassTransit de créer des liaisons d'échange pour les messages d'erreur?
var hostAddress = new Uri("rabbitmq://localhost/");
var username = "guest";
var password = "guest";
_busControl = MassTransit.Bus.Factory.CreateUsingRabbitMq(configurator =>
{
var host = configurator.Host(hostAddress, h =>
{
h.Username(username);
h.Password(password);
});
configurator.ReceiveEndpoint(host, "myqueue_error",
endpointConfigurator =>
{
endpointConfigurator.Handler<SomeMessage>(context =>
{
return Console.Out.WriteLineAsync("Woop");
});
});
});
Dans l'exemple ci-dessus, il établira des liaisons pour tout ce qui publie SomeMessage
et les diriger dans la myqueue_error
que je ne veux que des messages allant dans à cette file qui a été transférée du service qui échoue. Y at-il de toute façon à consommer des messages d'une file d'attente mais dire à MassTransit de ne pas obtenir de bindings pour eux?
Mise à jour - Solution potentiel
Il semble que je ne ai pas besoin de configurer un ReceiveEndpoint mais je peux simplement renommer le ControlBus d'accepter le message que je me soucie, ce sera alors en mesure de traiter ces messages sans créer de liaison d'échange avec les messages.
est sous le code modifié, pas sûr si cela est un moyen idéal mais il fonctionne
var hostAddress = new Uri("rabbitmq://localhost/");
var username = "guest";
var password = "guest";
_busControl = MassTransit.Bus.Factory.CreateUsingRabbitMq(configurator =>
{
configurator.Host(hostAddress, h =>
{
h.Username(username);
h.Password(password);
});
// We need to make the queue look like the error queue
configurator.BusQueueName = $"{_queue}_error";
configurator.Durable = true;
configurator.AutoDelete = false;
configurator.SetQueueArgument("x-expires", null);
});
var connectHandle = _busControl.ConnectHandler<SomeMessage>(context => Console.Out.WriteLineAsync("Woop"));
_busHandle = _busControl.Start();
_busHandle.Ready.Wait();
// Wait
// Clean up
connectHandle.Disconnect();
_busHandle.Stop