选择哪种Azure消息传递服务以不同的消息发布给不同的订阅者?

时间:2019-08-19 15:58:09

标签: azure azureservicebus azure-eventhub azure-eventgrid

来自last question关于Azure消息服务的信息,方法是使用服务总线主题发布一条通用消息来增加订阅者数量。但是我们遇到了一个问题,我们的消息大小超出了服务总线限制(256KB),因此,因此我们通过将GIANT消息拆分为一小段子消息并将其发送给不同的订阅者来更改了设计,这是我想要实现的目标:

假设我们将订单对象保存在名为 SaveOrder 的azure函数中,成功保存订单后,我们想向3个订阅者/消费者发送不同的消息(内容),即还使用天蓝色函数实现/触发

订户/天蓝色功能1 将用于报告-带有消息1 ,例如

{
 'reportHeader':'Order Report for ID 012913',
 'report_notes':'A few additional report notes...'
}

订户/天蓝色功能2 将用于日志记录(Sql Server)-带有消息2 ,例如

{
  'logAction':'Order Saved Successfully', 
  'logTime':'08/12/2019 12:38:12 AM',
  'logDescription': 'Order Id - 0139281',
  'log_notes':'A few additional log notes...'
}

订户/天蓝色功能3 将用于持续的业务逻辑。 -带有消息3 ,例如

{
  'action':'Prepare product accumulation',
  'ProductList': {
    '813891':3
    '581231':1
  },
  'accumulation_notes':'A few additional accumulation notes...'
}

所有上述 azure函数订阅者将独立工作/隔离,并且我们的Azure函数 SaveOrder 不必等待这三个函数中的任何一个,它应该消息发布后退出或终止。

在这种情况下,我应该在Azure中选择哪种消息传递服务来处理?服务巴士在这里还能继续工作吗?据我了解,服务总线主题将发送/发布“相同/一个”消息内容,从而使订阅者数量倍增。

2 个答案:

答案 0 :(得分:0)

对于多个出站流中的每一个,您可以有一个单独的主题或队列。但是,您可能应该发布一条包含有关某个主题的所有必要信息的消息,并让三个单独的使用者对消息进行不同的处理。

例如,不应对您的函数进行编码以生成与其无关的“电子邮件通知消息”。它应该发布OrderSaved消息,如果服务想要订阅该消息并发送电子邮件,则可以。

答案 1 :(得分:0)

如果message1总是只去function1message2只去function2,依此类推,创建3条服务总线Queues就足够了。这只是将消息从发送方传输到接收方(函数)(FIFO样式)。

SaveOrder,您将message1发送到queue1,将message2发送到queue2,等等。

  • function1queue1接收消息。
  • function2queue2接收消息。
  • function3queue3接收消息。

使用topics和订阅也可以通过创建3个主题(每个主题具有1个订阅)来进行订阅:

SaveOrder,您将message1发送到topic1,将message2发送到topic2,等等。

  • function1subscription1接收消息。
  • function2subscription2接收消息。
  • function3subscription3接收消息。

第二种情况更加灵活,因为它允许通过向同一主题添加更多订阅来允许同一(复制)消息的多个接收者。

此外,您可以gzip邮件的有效负载以提高传输效率。