对于 MassTransit,在设置新服务总线时必须声明端点/类型;但是,我正在尝试删除该依赖项,以便在对消费者进行测试时,我可以利用环回端点,但一旦投入生产,它将使用实际的 msmq 端点。
下面是一个新服务总线的示例设置:
public class ConsumerService
{
IServiceBus _bus;
public void Start()
{
// Initalize Service Bus
_bus = ServiceBusFactory.New(x =>
{
//x.UseMsmq();
x.ReceiveFrom("loopback://localhost/MyQueue");
x.SetConcurrentConsumerLimit(1);
});
_bus.SubscribeConsumer(() => new MyConsumer());
}
public void Stop()
{
_bus.Dispose();
}
}
最佳答案
使用构造函数注入(inject):
public class ConsumerService
{
private readonly IBusInitializer initializer;
public ConsumerService(IBusInitializer initializer)
{
this.initializer = initializer;
}
IServiceBus _bus;
public void Start()
{
// Initalize Service Bus
_bus = ServiceBusFactory.New(x =>
{
this.initializer.initialize(x);
x.SetConcurrentConsumerLimit(1);
});
_bus.SubscribeConsumer(() => new MyConsumer());
}
public void Stop()
{
_bus.Dispose();
}
}
其中 IInitializer
是一个正确定义的接口(interface),实现可以是:
public class LoopbackInitializer : IBusInitializer
{
public void Initialize(WhateverXIs x)
{
x.ReceiveFrom("loopback://localhost/MyQueue");
}
}
public class MsmqInitializer : IBusInitializer
{
public void Initialize(WhateverXIs x)
{
x.UseMsmq();
}
}
在您的测试或 Composition Root 中注入(inject)所需的实现.
关于unit-testing - MassTransit 服务总线配置和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383124/