如何使用RabbitMq进行异步RPC调用

10 c# asp.net rabbitmq .net-core

我正在尝试通过RabbitMq调用后端(C#)的RestApi(asp.net核心).要处理许多请求,我需要异步调用后端.

对我来说,来自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);
      }
  }
Run Code Online (Sandbox Code Playgroud)

我在考虑以下几种可能性:


可能性1:

我可以使用SimpleRpcClient为每个请求创建一个自己的实例.这将导致为每个请求创建一个新的回复队列.

可能性2:

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


使多个调用异步的最佳做法是什么?是否已经实现了第二种可能性,还是我需要自己实现?

SAC*_*ACn 1

  1. 设计一个作业队列,将作业从生成器推送到队列并忘记,以便作业生成器保持响应
  2. 让多个工作线程等于可用CPU线程数(以优化性能)来处理作业
  3. 每个工作人员从主队列中取出作业并将其与结果一起放入新队列中。
  4. 保留功能
    1. 不处理*太旧的**工作。
    2. 终止长时间运行的作业。
    3. 首先选择高优先级的工作。
    4. 如果允许,设计远程作业运行器节点