来自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中选择哪种消息传递服务来处理?服务巴士在这里还能继续工作吗?据我了解,服务总线主题将发送/发布“相同/一个”消息内容,从而使订阅者数量倍增。。
答案 0 :(得分:0)
对于多个出站流中的每一个,您可以有一个单独的主题或队列。但是,您可能应该发布一条包含有关某个主题的所有必要信息的消息,并让三个单独的使用者对消息进行不同的处理。
例如,不应对您的函数进行编码以生成与其无关的“电子邮件通知消息”。它应该发布OrderSaved消息,如果服务想要订阅该消息并发送电子邮件,则可以。
答案 1 :(得分:0)
如果message1
总是只去function1
,message2
只去function2
,依此类推,创建3条服务总线Queues就足够了。这只是将消息从发送方传输到接收方(函数)(FIFO样式)。
从SaveOrder
,您将message1
发送到queue1
,将message2
发送到queue2
,等等。
function1
从queue1
接收消息。function2
从queue2
接收消息。function3
从queue3
接收消息。使用topics和订阅也可以通过创建3个主题(每个主题具有1个订阅)来进行订阅:
从SaveOrder
,您将message1
发送到topic1
,将message2
发送到topic2
,等等。
function1
从subscription1
接收消息。function2
从subscription2
接收消息。function3
从subscription3
接收消息。第二种情况更加灵活,因为它允许通过向同一主题添加更多订阅来允许同一(复制)消息的多个接收者。
此外,您可以gzip邮件的有效负载以提高传输效率。