单个微服务应该监听单个azure总线主题/队列吗?

问题描述 投票:0回答:2

我们有一个Azure服务结构微服务,它可以监听多个azure服务总线主题(主题A,主题B)。

主题A的消息流量超过主题B的10倍。为了处理服务的可扩展性,我们将创建多个服务实例。

  1. 我的第一个问题是,在大多数服务实例中都不会在主题B中获得消息,因为主题B的流量较少,那么它是否会浪费资源?

2为Topic A和Topic B监听器创建不同的微服务是否更好,并创建10x监听主题B和主题B监听器服务的x实例的微服务实例?

  1. 在azure服务总线中创建一个消息监听器,每次都继续拉消息吗?意味着不断查看/检查消息,消息是否存在。

谢谢大家的支持。

azure microservices azure-service-fabric azureservicebus
2个回答
0
投票
  1. 如果一个服务接收来自2个主题的消息,则几乎不浪费资源。收听消息不是一个资源密集型过程。
  2. 这取决于您的应用要求。
  3. 这取决于您使用的是SBMP / SOAP(默认值)还是AMQP作为通信协议。 AMQP是基于连接的。 SBMP进行(长期)民意调查。

0
投票

微服务提倡松散耦合的服务,每个微服务将处理自己的域。

遵循微服务方法,如果您了解必须创建两个不同的主题来发布消息,可能是因为它们具有不同的范围\域,需要自己的微服务。

在您的描述中,很难确定TopicS和Topic的域名是否相关,因此我们无法提供好的建议。

在任何情况下,如果一个服务监听这两个主题,我们假设TopicA处理1000条消息,而TopicB每秒处理100条消息。如果您必须发布应用程序的新版本以处理TopicB消息的更改,则必须停止处理TopicA,这是不必要的。所以你要耦合服务,首先应该是两个独立的服务,或者两个主题应该作为一个单独处理。

关于你的问题:

1我的第一个问题是,在大多数服务中,实例不会在主题B中获得消息,因为主题B的流量较少,那么它是否会浪费资源?

浪费资源与设计应用程序的方式相关,可能是您的服务监听queue \ topic并同时处理它,并且使用太多内存来保持一直运行。在这种情况下,可以分割它们并创建一个Queue \ Topic Listener和其他消息处理程序,它将接收要处理的消息,如果它在没有处理消息的情况下保持太长时间,则将其关闭,只留下监听器。您也可以使用actor而不是服务。

2为Topic A和Topic B监听器创建不同的微服务是否更好,并创建10x监听主题B和主题B监听器服务的x实例的微服务实例?

对于服务是的,关于实例的数量,它应该由队列的大小驱动,否则你会有太多的监听器并且也浪费资源,如果你按照分割服务的方法,你需要一个监听器从queue \ topic接收消息,它将消息传递给多个消息处理程序(服务实例\ actors),queue \ topic侦听器同时控制正在运行的实例的数量。

3在天蓝色服务总线中创建消息监听器,每次都继续拉消息吗?意味着不断查看/检查消息,消息是否存在。

不是唯一的方法,但它是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.