RabbitMQ kullanmaya başladım ve öğreticilerle birlikte takip ettikten sonra, şimdi ihtiyacım olan şekilde çalışmaya çalışıyorum ve zorlukla karşılaşıyorum. Sahip olduğum kurulum, önce bir RPC yapabilmem ve daha sonra, müşterinin bir iş kuyruğuna başka bir mesaj yollayacağı (ya da vermeyecek) tepkisine dayanmak zorunda olduğumdur. müşteri). Ne yazık ki, bu çalışmayı bir araya getirme çabalarım istediğim gibi yürümüyor gibi görünmüyor. Sunucu tarafında, (Ben hepsi aynı sorunları olan birçok varyasyonu denedim) böyle bir şey var:Birlikte çalışmak için iş kuyruğu ve RPC alma
var factory = new ConnectionFactory() { HostName = "localhost" };
connection = factory.CreateConnection();
channel = connection.CreateModel();
channel.ExchangeDeclare(exchange: "jobs", type: "direct", durable: true);
// I started with a named queue, not sure if that's better or worse for this
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: "jobs",
routingKey: "saveJob_queue");
channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
// save stuff that was sent with the saveJob_queue routingKey
}
channel.BasicConsume(queue: queueName,
noAck: false,
consumer: consumer);
// set up channel for RPC
// Not sure if this has to have another channel, but it wasn't working on the same channel either
rpcChannel = connection.CreateModel();
var rpcQueueName = rpcChannel.QueueDeclare().QueueName;
rpcChannel.QueueBind(queue: rpcQueueName,
exchange: "jobs",
routingKey: "rpc_CheckJob_queue");
var rpcConsumer = new EventingBasicConsumer(rpcChannel);
rpcConsumer.Received += (model, ea) =>
{
// do my remote call and send back a response
}
Ben sorun olduğunu hala yönlendirme tuşu rpc_CheckJob_queue
ile jobs
alışverişi gönderilen bir mesaj ilk kanalda Recieved
olayını tetikleyerek, sadece saveJob_queue
rotalarını almasına rağmen sona erer. Bu işleyicide ea.RoutingKey
'u kontrol edebilir ve sadece bu mesajları görmezden gelebilirim, ama neden ilk etapta niçin orada olduklarını anlamıyorum.
Bağlantı kurmak için doğru yol ne olurdu, böylece hem iş kuyruğu iletileri hem de RPC iletileri alabilir ve bunları doğru şekilde işleyebilir?
"RpcChannel .BasicConsume (rpcQueueName: queueName,'?) Gibi bir şeyi kaçırıyor musunuz? Ayrıca, – cantSleepNow