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

时间:2018-03-03 05:43:35

标签: azure microservices azure-service-fabric azureservicebus

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

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

  1. 我的第一个问题是,在大多数服务实例中都不会在主题B中收到消息,因为主题B的流量较少,那么会浪费资源吗?
  2. 2为Topic A和Topic B监听器创建不同的微服务是否更好,并创建10x微服务实例来监听主题B和主题B监听器服务的x实例?

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

2 个答案:

答案 0 :(得分:0)

  1. 如果一个服务收到来自2个主题的消息,那么几乎没有浪费资源。收听消息并不是一个资源密集型的过程。
  2. 这取决于您的应用要求。
  3. 这取决于您使用SBMP / SOAP(默认)还是AMQP作为通信协议。 AMQP是基于连接的。 SBMP进行(长期)民意调查。

答案 1 :(得分:0)

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

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

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

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

关于你的问题:

  

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

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

  

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

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

  

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

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