Можно ли использовать Rebus InMemory Transport для реализации конкурирующих потребителей, таких как образец RabbitScaleout?
Контекст: у меня есть монолитное приложение, которое мне нужно разбить и масштабировать на определенные части. Мы должны поддерживать монолитное развертывание, работая над контейнерным/облачным развертыванием.
Я намеревался провести рефакторинг, использовать Rebus для координации между службами и использовать InMemoryTransport для монолита и RabbitMQ для контейнерных служб. Будет ли это работать?
В приведенном ниже коде вызываются оба обработчика.
class Program
{
static void Main(string[] args)
{
using (var activator = new BuiltinHandlerActivator())
{
activator.Register(() => new Handler1());
activator.Register(() => new Handler2());
Configure.With(activator)
.Transport(t => t.UseInMemoryTransport(new InMemNetwork(), "queue"))
.Logging( t=> t.None())
.Routing( r=> r.TypeBased().Map<string>("queue"))
.Start();
activator.Bus.Send("test");
Thread.Sleep(1000);
}
}
}
class Handler1 : IHandleMessages<String>
{
public async Task Handle(String message)
{
Console.WriteLine("Handler1 " + message);
}
}
class Handler2 : IHandleMessages<String>
{
public async Task Handle(string message)
{
Console.WriteLine("Handler2 " + message);
}
}