Rabbitmq 服务结构中的可靠并发队列

Rabbitmq 服务结构中的可靠并发队列,rabbitmq,azure-service-fabric,service-fabric-stateful,Rabbitmq,Azure Service Fabric,Service Fabric Stateful,我有一个带有一个无状态服务和多个有状态服务的服务结构应用程序。无状态服务从RabbitMQ读取(使用MassTransit)并将消息传递给相应的有状态服务以进行处理。传递给有状态服务的消息在ConcurrentQueue和RunAsync it中排队并处理。在收到更少的信息之前,一切都很好。最近,消息的数量增加了数倍。现在的情况是RabbitMq中的消息计数以百万计,并且有状态服务队列过载。内存使用率变得非常高,集群陷入困境 队列是否在RunAsync方法需要等待的排队过程中被锁定。排队的人很多

我有一个带有一个无状态服务和多个有状态服务的服务结构应用程序。无状态服务从RabbitMQ读取(使用MassTransit)并将消息传递给相应的有状态服务以进行处理。传递给有状态服务的消息在ConcurrentQueue和RunAsync it中排队并处理。在收到更少的信息之前,一切都很好。最近,消息的数量增加了数倍。现在的情况是RabbitMq中的消息计数以百万计,并且有状态服务队列过载。内存使用率变得非常高,集群陷入困境

  • 队列是否在RunAsync方法需要等待的排队过程中被锁定。排队的人很多
  • 如果队列计数非常高,我无法找到停止从RabbitMq获取的方法。至少群集不会挂起或崩溃
  • 在输入负载非常高的情况下,最好的设计是什么

  • 谢谢

    您如何划分有状态服务?如果您有一个范围或命名分区,那么您的所有消息不应该命中同一个复制副本。如果您正确应用了分区方案,您的消息将在同一有状态服务的不同分区中结束,并且您可以横向扩展。

    1。
    显示您的代码(生成和使用消息)
    2。
    为什么需要有状态服务<代码>3。为什么需要单独的无状态服务来读取队列?为什么不在有状态服务中读取消息?@mtkachenko队列具有不同类型的数据。要处理每种类型,有一种有状态的服务类型具有并发队列。因此,链接到RabbitMq的无状态服务将获取消息,检查相应有状态服务中的类型和队列。有状态服务是Int64分区的。由于某些类型的数据具有更高的计数,因此应用程序是以这种方式设计的。分区是Int64分区,每个分区都使用随机的分区键进行调用。问题是,由于要处理数百万条记录,服务无法保存这些记录。虚拟机内存已满。这个设计似乎不太好。我可以轮询rabbitmq而不是将消息推送到应用程序吗?