Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
C# 如何将队列中的新消息通知连续Azure WebJob?_C#_Azure_Azure Webjobs_Azure Sdk .net_Azure Queues - Fatal编程技术网

C# 如何将队列中的新消息通知连续Azure WebJob?

C# 如何将队列中的新消息通知连续Azure WebJob?,c#,azure,azure-webjobs,azure-sdk-.net,azure-queues,C#,Azure,Azure Webjobs,Azure Sdk .net,Azure Queues,连续webjob正在从队列中运行消息处理(正常优先级)。但是,如果另一个队列(高优先级)有任何消息,它希望得到通知,然后切换到处理该队列之外的消息,直到消息为空,然后恢复到原始队列 如何做到这一点?我不想在处理每条消息之前手动检查高优先级队列,因为这将花费IO操作(收费)。 据我所知,WebJoobe不能直接相互通信-所以使用另一个带队列触发器的WebWork,我认为不会起作用(请告诉我如果不正确)。 < P>里奇,你应该考虑使用Azure服务总线,然后使用优先级队列。有一个很好的帖子详细介绍了

连续webjob正在从队列中运行消息处理(正常优先级)。但是,如果另一个队列(高优先级)有任何消息,它希望得到通知,然后切换到处理该队列之外的消息,直到消息为空,然后恢复到原始队列

如何做到这一点?我不想在处理每条消息之前手动检查高优先级队列,因为这将花费IO操作(收费)。
据我所知,WebJoobe不能直接相互通信-所以使用另一个带队列触发器的WebWork,我认为不会起作用(请告诉我如果不正确)。

< P>里奇,你应该考虑使用Azure服务总线,然后使用优先级队列。有一个很好的帖子详细介绍了如何在这方面 马克使用了两种技巧:

实现优先级队列的一个非常简单的方法是拥有两个(或更多)队列。一个队列用于高优先级消息,另一个队列用于低优先级消息。无论何时发送消息,您都可以选择将其发送到哪个队列。因此,这种技术假设发送消息的代码知道消息是否应该是高优先级的,并且还知道有多少优先级队列

第二种技巧是:

另一种方法是使用Azure服务总线主题和订阅。使用这种方法,所有消息都发送到同一主题。但消息中包含一段元数据,可用于将消息划分为高优先级和低优先级


为什么不运行两个队列触发的Web作业?这似乎解决了这个问题,没有任何负面影响,除非您试图在传递高优先级消息时不从正常优先级队列中传递消息?@SimonW是的,没错,还有一点更复杂。我不想写完整的场景背景,因为我认为这会分散我对这个问题的注意力,但实际上webjob是从队列中取出消息,并以限制的速率处理它们(受时间限制,例如外部API设置的每秒1次)。这就是瓶颈。我能想到的实现这一点的唯一方法就是使用一个带计时器的连续webjob。也许这种架构是不正确的——我可能会就此提出另一个问题。我认为以这种方式使用Webjobs可能并不合适。您可能希望控制将消息馈送到传入管道(队列)的速率并以这种方式进行控制,而不是尝试在输出端进行节流。危险在于,如果您将太多的消息送入队列,并且处理该消息的时间太长,则可能是处理时已过时或在队列中过期。