我正在嘗試圍繞使用MassTransit創建的一些服務創建黑盒集成測試。服務的要點是它在MassTransit通道上接收消息,處理消息並在不同的MassTransit通道上發送消息(請注意,這不是請求 - 回覆語義,而是流水線中更多的組件):使用MassTransit集成測試微服務
IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost"),
h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint(host, "Queue1", ep =>
{
ep.Handler<ItemStarted>(context =>
{
ItemFinished item = FinishMessage(context.Message);
context.Publish(item);
});
});
});
bus.Start();
爲了測試這個,我想我需要的是從總線接收消息的同步方式。有沒有辦法做到這一點:
IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
var host = cfg.Host(new Uri("rabbitmq://localhost"),
h =>
{
h.Username("guest");
h.Password("guest");
}));
bus.Start();
bus.Publish(new ItemStarted());
// This is what does not seem to exist
ItemFinished finished = bus.Receive<ItemFinished>(timeout : Timespan.FromSeconds(5));
// Assertions about finished
有沒有辦法直接從MassTransit收到消息,而不連接最多消費類或拉姆達?
MultiTestConsumer設計是否可以與RabbitMQ一起使用?我下載了源代碼並運行了測試。當我按原樣運行它們時它們都很好,但是當我將Using_the_multi_test_consumer的基類更改爲RabbitMqTestFixture時,測試全部失敗。這是設計嗎? –
要與RabbitMQ一起使用它,如果您想要接收發布消息,則需要將它連接到ReceiveEndpoint(使用.Configure()方法),以便創建交換綁定。 –