选择哪种 Azure 消息传递服务向不同的订阅者发布不同的消息?
Which Azure messaging service to choose to publish with different messages to different subscribers?
来自 通过使用 服务总线主题 向多个订阅者发布一条公共消息 关于 Azure 消息服务。但是我们遇到了一个问题,我们的消息大小超过了服务总线的限制(256KB),所以我们改变了我们的设计,将 GIANT 消息拆分成一小段子消息并将它们发送到不同的订阅者,这是我想要实现的:
假设我们在名为 SaveOrder 的 azure 函数中保存一个订单对象,在成功保存订单后,我们想发送 不同的消息(内容)到 3 subscribers/consumers 这也是 implemented/triggered 具有 azure 函数,
subscriber/azure 函数 1 将用于报告 - 与消息 1,例如
{
'reportHeader':'Order Report for ID 012913',
'report_notes':'A few additional report notes...'
}
subscriber/azure 函数 2 将用于日志记录(Sql 服务器)- 消息 2,例如
{
'logAction':'Order Saved Successfully',
'logTime':'08/12/2019 12:38:12 AM',
'logDescription': 'Order Id - 0139281',
'log_notes':'A few additional log notes...'
}
subscriber/azure 函数 3 将用于继续业务逻辑。 - 消息 3,例如
{
'action':'Prepare product accumulation',
'ProductList': {
'813891':3
'581231':1
},
'accumulation_notes':'A few additional accumulation notes...'
}
以上所有 azure 函数订阅者都可以使用 independently/isolated,而我们的 azure 函数 SaveOrder 不必等待这 3 个函数中的任何一个,它应该在消息发布后退出或终止。
在这种情况下,我应该在 Azure 中选择哪个消息服务来处理这个问题?服务总线还会在这里工作吗?据我了解,服务总线主题将 send/publish "same/one" 消息内容增加订阅者。
您可以为多个出站流中的每一个设置单独的主题或队列。但是,您可能应该向一个主题发布一条包含所有必要信息的消息,并让三个不同的消费者对该消息执行不同的操作。
例如,不应将您的函数编码为生成与其无关的 "email notification message"。它应该发布一条 OrderSaved 消息,如果服务想要订阅该消息并发送电子邮件,它可以。
如果 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 压缩,以提高传输效率。
来自
假设我们在名为 SaveOrder 的 azure 函数中保存一个订单对象,在成功保存订单后,我们想发送 不同的消息(内容)到 3 subscribers/consumers 这也是 implemented/triggered 具有 azure 函数,
subscriber/azure 函数 1 将用于报告 - 与消息 1,例如
{
'reportHeader':'Order Report for ID 012913',
'report_notes':'A few additional report notes...'
}
subscriber/azure 函数 2 将用于日志记录(Sql 服务器)- 消息 2,例如
{
'logAction':'Order Saved Successfully',
'logTime':'08/12/2019 12:38:12 AM',
'logDescription': 'Order Id - 0139281',
'log_notes':'A few additional log notes...'
}
subscriber/azure 函数 3 将用于继续业务逻辑。 - 消息 3,例如
{
'action':'Prepare product accumulation',
'ProductList': {
'813891':3
'581231':1
},
'accumulation_notes':'A few additional accumulation notes...'
}
以上所有 azure 函数订阅者都可以使用 independently/isolated,而我们的 azure 函数 SaveOrder 不必等待这 3 个函数中的任何一个,它应该在消息发布后退出或终止。
在这种情况下,我应该在 Azure 中选择哪个消息服务来处理这个问题?服务总线还会在这里工作吗?据我了解,服务总线主题将 send/publish "same/one" 消息内容增加订阅者。
您可以为多个出站流中的每一个设置单独的主题或队列。但是,您可能应该向一个主题发布一条包含所有必要信息的消息,并让三个不同的消费者对该消息执行不同的操作。
例如,不应将您的函数编码为生成与其无关的 "email notification message"。它应该发布一条 OrderSaved 消息,如果服务想要订阅该消息并发送电子邮件,它可以。
如果 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 压缩,以提高传输效率。