我如何使用RabbitMQ进行异步RPC调用



我正在尝试执行通过RabbitMQ调用后端(C#)的RESTAPI(ASP.NET CORE)。要处理许多请求,我需要异步调用后端。

对我来说,RabbitMQ的示例代码似乎并不是线程安全,因为它会被删除消息,直到返回具有正确相关ID的消息。所有其他人都将被忽略。(链接:https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html)

  while(true)
  {
      var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
      if(ea.BasicProperties.CorrelationId == corrId)
      {
          return Encoding.UTF8.GetString(ea.Body);
      }
  }

我正在考虑以下可能性:


可能性1:

我可以使用SimpleerPcclient并为每个请求创建一个自己的实例。这将导致每个请求都会创建一个新的队列。

可能性2:

创建一个自己的RPC客户端,该客户端创建一个回复队列(可能是每个请求类型),并根据相关ID返回正确的请求。


做出多个呼叫异步的最佳实践是什么?是否已经实现了第二种可能性,或者我需要自己实施?

  1. 设计一个工作队列,将作业从发电机排队而忘记,以便发电机保持响应
  2. 有多个工人等于可用的CPU线程数量(用于优化性能)来处理作业
  3. 每个工人从Main排队从Main排队任职,并将其与新队列一起放置。
  4. 保留功能
    1. 不要处理*太旧**工作。
    2. 终止长期运行作业。
    3. 选择高优先级首先作业。
    4. 如果允许设计远程作业跑步者节点

最新更新