EasyNetQ使用Request/Response可以来实现RPC调用
Request
namespace Request {
class Program {
static void Main(string[] args) {
var connStr = "host=127.0.0.1;virtualHost=TESTVHOST;username=admin;password=abc123";
using (var bus = RabbitHutch.CreateBus(connStr)) {
var input = "";
Console.WriteLine("Please enter a message.'Request'");
while ((input = Console.ReadLine()) == "Request") {
string s = "hello";
var msg = bus.Request<string, ResponseMessageDto>(s,cfg=> {
cfg.WithQueueName("TestQueue");
});
Console.WriteLine(msg.Message);
}
}
}
}
}
Response
namespace Response {
class Program {
static void Main(string[] args) {
var connStr = "host=127.0.0.1;virtualHost=TESTVHOST;username=admin;password=abc123";
using (var bus = RabbitHutch.CreateBus(connStr)) {
while (true) {
var msg = bus.Respond<string, ResponseMessageDto>(s => {
return new ResponseMessageDto() { Success = true, Message = $"Response:{s}" };
},cfg=> {
cfg.WithQueueName("TestQueue");//自定义队列名的
});
}
}
}
}
}
Request和Response的实体对象一样都是ResponseMessageDto
Request和Response连接的是同一个RabbitMq的虚拟主机,队列名相同。那么Request发送请求时,Response就可以提供响应返回值,Request就可以获取到。
这个跟我们采用其他的模式调用RPC很像,如果请求很耗时的话可以采用异步的方法。