我无法完成这项工作。
我尝试实现Masstransit的响应模式。
我100%肯定只缺少一个细节。
消费者收到我的消息,但是我在客户端收到超时请求。
我尝试过类似于此处给出的代码:https://masstransit-project.com/usage/requests.html
客户:
public static async Task Main(string[] args)
{
var TheBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
sbc.Host(("rabbitmq://192.168.180.44"), host =>
{
host.Username("bsone");
host.Password("bsone");
});
});
var factory = TheBus.CreateClientFactory();
var serviceAddress = new Uri("rabbitmq://192.168.180.44/hugo");
var client = factory.CreateRequestClient<Registrieren>(TimeSpan.FromSeconds(10));
var response = client.GetResponse<IRegisterDone>( new Registrieren()
{
FaMaterial = null,
Gewicht = 1,
Erledigt = true,
UserId = "WW",
Charge = "11",
stock = null
}).Result;
Console.WriteLine(response.Message.Status);
}
}
服务器
public class Program
{
private static IBusControl bus;
public static void Main(string[] args)
{
var TheBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
sbc.Host(("rabbitmq://192.168.180.44"), host =>
{
host.Username("bsone");
host.Password("bsone");
});
sbc.ReceiveEndpoint("hugo", end =>
{
end.Consumer<RegistrierenFaMaterialBuchungConsumer>();
});
});
TheBus.Start();
Console.WriteLine("Masstransit Up and Running");
Console.ReadLine();
}
}
public class RegistrierenFaMaterialBuchungConsumer : IConsumer<wsb.erp.net.waage.messages.bsone.IRegistrieren>
{
private IRegistrieren _registrieren;
public Task Consume(ConsumeContext<IRegistrieren> context)
{
_registrieren = context.Message;
Console.WriteLine($"{DateTime.Now} - Message Registrieren Received");
context.Respond<IRegisterDone>(new RegisterDone() { Status = "DONE" });
return Task.CompletedTask;
}
}
您还需要在客户端上启动总线,就像在服务器上使用接收端点启动总线一样。