Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择哪个Azure消息服务将不同的消息发布到不同的订阅者?_Azure_Azureservicebus_Azure Eventhub_Azure Eventgrid - Fatal编程技术网

选择哪个Azure消息服务将不同的消息发布到不同的订阅者?

选择哪个Azure消息服务将不同的消息发布到不同的订阅者?,azure,azureservicebus,azure-eventhub,azure-eventgrid,Azure,Azureservicebus,Azure Eventhub,Azure Eventgrid,通过使用服务总线主题发布一条公共消息以增加订阅者,从about Azure messaging service开始。但是我们遇到了一个问题,即我们的消息大小超过了服务总线的限制(256KB),因此我们改变了设计,将巨大的消息分成一小段子消息,并将其发送给不同的订阅者,,下面是我想要实现的: 假设我们正在azure函数中保存一个名为SaveOrder的订单对象,订单成功保存后,我们希望向3个订阅者/消费者发送不同的消息(内容),这也是通过azure函数实现/触发的 订户/azure功能1将用于报告

通过使用服务总线主题发布一条公共消息以增加订阅者,从about Azure messaging service开始。但是我们遇到了一个问题,即我们的消息大小超过了服务总线的限制(256KB),因此我们改变了设计,将巨大的消息分成一小段子消息,并将其发送给不同的订阅者,,下面是我想要实现的:

假设我们正在azure函数中保存一个名为SaveOrder的订单对象,订单成功保存后,我们希望向3个订阅者/消费者发送不同的消息(内容),这也是通过azure函数实现/触发的

订户/azure功能1将用于报告-消息1,例如

{
 'reportHeader':'Order Report for ID 012913',
 'report_notes':'A few additional report notes...'
}
{
  'logAction':'Order Saved Successfully', 
  'logTime':'08/12/2019 12:38:12 AM',
  'logDescription': 'Order Id - 0139281',
  'log_notes':'A few additional log notes...'
}
{
  'action':'Prepare product accumulation',
  'ProductList': {
    '813891':3
    '581231':1
  },
  'accumulation_notes':'A few additional accumulation notes...'
}
订阅服务器/azure功能2将用于日志记录(Sql Server)和消息2,例如

{
 'reportHeader':'Order Report for ID 012913',
 'report_notes':'A few additional report notes...'
}
{
  'logAction':'Order Saved Successfully', 
  'logTime':'08/12/2019 12:38:12 AM',
  'logDescription': 'Order Id - 0139281',
  'log_notes':'A few additional log notes...'
}
{
  'action':'Prepare product accumulation',
  'ProductList': {
    '813891':3
    '581231':1
  },
  'accumulation_notes':'A few additional accumulation notes...'
}
订户/azure功能3将用于持续业务逻辑。-带有消息3,例如

{
 'reportHeader':'Order Report for ID 012913',
 'report_notes':'A few additional report notes...'
}
{
  'logAction':'Order Saved Successfully', 
  'logTime':'08/12/2019 12:38:12 AM',
  'logDescription': 'Order Id - 0139281',
  'log_notes':'A few additional log notes...'
}
{
  'action':'Prepare product accumulation',
  'ProductList': {
    '813891':3
    '581231':1
  },
  'accumulation_notes':'A few additional accumulation notes...'
}
上述所有azure功能订阅者将独立/独立工作,并且我们的azure功能存储订单不必等待这3个功能中的任何一个,它应该在消息发布后退出或终止


在这种情况下,我应该在Azure中选择哪种消息服务来处理这个问题?服务巴士在这里还能用吗?据我所知,服务总线主题将向多个订阅者发送/发布“相同/一”的消息内容。

您可以为多个出站流中的每个流设置单独的主题或队列。但是,您可能应该将包含所有必要信息的单个消息发布到一个主题,并让三个单独的使用者对该消息执行不同的操作


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

如果
message1
总是只转到
function1
message2
只转到
function2
,等等,创建3条服务总线就足够了。这只是将消息从发送方传输到接收方(函数)(FIFO样式)

SaveOrder
,您可以将
message1
发送到
queue1
message2
发送到
queue2

  • function1
    queue1
    接收消息
  • function2
    queue2
    接收消息
  • function3
    从队列3接收消息
通过创建3个主题(每个主题有1个订阅),使用和订阅也将起作用:

SaveOrder
,您可以将
message1
发送到
topic1
message2
发送到
topic2

  • 功能1
    从订阅1接收消息
  • function2
    从订阅2接收消息
  • 功能3
    从订阅3接收消息
第二种方案更灵活,因为它允许多个接收者通过向同一主题添加更多订阅来接收同一(复制)消息


此外,您还可以对邮件的有效负载进行gzip处理,以提高传输效率。

谢谢您的建议。需要明确的是,与其发送3条不同的消息,您是否建议在发布端生成一条“大”消息,包括所有“详细”子消息,然后使用服务总线主题发布,在订阅端,对于每个订阅方,我们需要过滤传入的大消息,并参与其中?如果是这样,我们已经考虑过了,但我们遇到了一个挑战:功能应用程序/服务总线消息大小有一个限制,如果我们将所有内容都包含在一个“大”中,我们的消息将超过该限制消息正文。最大消息大小:256KB,用于使用服务总线的标准计划这将是我们最初使用服务总线主题构建公共消息的想法,但由于服务总线中的消息大小限制,我们已经将split的设计更改为不同的子消息…为什么
SaveOrder
事件甚至有4K的数据?这似乎很奇怪。因为我们在输出消息中附加了更多的信息,例如,我们在
SaveOrder
中检索生产详细信息,并在消息中为每个产品附加了一些附加属性,如果生产列表太大(我们遇到的情况是#个产品超过50k),这会增加消息的大小,此外,对于通知和日志服务,我们还附上了其他信息。感谢您的建议!是,在本例中,msg_x仅转到func_x(1到1),在第二个选项中,您的意思是,通过创建3个主题,每个主题有1个订阅,我是否需要对我的3个函数执行相同的消息,并基于它们将筛选的主题?我不这么认为,正如前面提到的,你会将message1发送到topic1,message2发送到topic2,但是在这种情况下,使用topic和queue有什么区别?我的理解是,主题用于1对多的发布者/订阅者,而队列用于1对1的发布者/订阅者,很抱歉,我没有得到太多信息…不,我的意思是,使用主题和1订阅(无筛选器)提供与使用队列相同的功能。