Итак, задача: у меня есть один сервис, который производит заказы (простая стратегия алгоритмической торговли, основанная на конечном автомате) и отправляет их в RabbitMQ. Еще 2 микросервиса должны получать сообщения и записывать данные в консоль или телеграмму. Ничего серьезного.
Итак, как я уже говорил, я стараюсь использовать для этого WolverineFX+RabbitMQ. RabbitMQ был арендован на Cloudampq (бесплатная версия).
Вот конфигурация моего слушателя:
Код: Выделить всё
builder.UseWolverine(opts =>
{
opts.ApplicationAssembly = typeof(Program).Assembly;
opts.UseRabbitMq(messageBusConfiguration!.ConnectionString)
.EnableWolverineControlQueues()
.DisableDeadLetterQueueing()
.UseConventionalRouting(config =>
{
string projectName = Assembly.GetEntryAssembly().GetName().Name;
config.QueueNameForListener(type => $@"{type.FullName}_{projectName}").ConfigureListeners((cfg, ctx) =>
{
cfg.BindToExchange(ExchangeType.Topic, "LoggerExchange", $@"{ctx.MessageType.FullNameInCode()}");
});
})
.ConfigureListeners(c => c.ConfigureQueue(t => { t.AutoDelete = true; t.IsDurable = false; }))
.AutoProvision();
opts.UseSystemTextJsonForSerialization();
opts.UnknownMessageBehavior = UnknownMessageBehavior.LogOnly;
opts.DefaultExecutionTimeout = TimeSpan.FromMinutes(5);
opts.DefaultRemoteInvocationTimeout = TimeSpan.FromMinutes(5);
opts.Policies.UseDurableInboxOnAllListeners();
opts.Policies.UseDurableOutboxOnAllSendingEndpoints();
opts.Services.AddResourceSetupOnStartup();
});
Код: Выделить всё
[WolverineHandler]
public sealed class OrderLoggingHandler
{
public async Task HandleAsync(Order message)
{
Console.WriteLine("Order came");
}
}
Код: Выделить всё
builder.UseWolverine(opts =>
{
opts.ApplicationAssembly = typeof(Program).Assembly; opts.UseRabbitMq(messageBusConfiguration!.ConnectionString)
.AutoProvision()
.DisableDeadLetterQueueing()
.UseConventionalRouting(config =>
{
config.ExchangeNameForSending(type => "LoggerExchange")
.ConfigureSending((cfg, ctx) => cfg.ExchangeType(ExchangeType.Topic));
});
//.BindExchange("LoggerExchange", c => c.ExchangeType = ExchangeType.Topic);
opts.UseSystemTextJsonForSerialization();
opts.DefaultExecutionTimeout = TimeSpan.FromMinutes(5);
opts.DefaultRemoteInvocationTimeout = TimeSpan.FromMinutes(5);
opts.Services.AddResourceSetupOnStartup();
});
Это обмен, созданный как обмен темами

Все привязки верны
Это генерируется автоматически очередь.

Но не могу получить ни одного сообщения. В чем причина, может кто знает. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/798 ... er-problem
Мобильная версия