多个azure队列的一个监听器

时间:2017-10-26 22:18:21

标签: c# azure message-queue azure-webjobs

我想创建一个Web作业(侦听器)来侦听存储中的所有队列。如果有任何新消息,则会触发处理程序。

Azure WebJobs SDK提供仅侦听一个队列的解决方案:

public class Functions
{

    // This function will get triggered/executed when a new message is written 
    // on an Azure Queue called queue.
    public static async Task ProcessQueueMessage(
        [QueueTrigger("%test%")] CloudQueueMessage message,
        IBinder binder)
    {
        //do some stuff
    }
}

这种方法很好,但我需要: 1)听不同的队列 2)向这个班级注入一个班级,我认为我不能

所以我想创建自己的监听器。我想创建几个威胁,每个威胁都会侦听一个队列。然后,当我运行Web作业时,它会启动所有威胁。

我想知道是否有人可以提出更好的解决方案。代码示例非常好。

由于

2 个答案:

答案 0 :(得分:1)

除非你真的想要,否则你不需要创建自己的监听器。 Azure Webjobs SDK已经为您完成了繁重的工作。

这是一个可以处理来自不同队列的数据的Functions.cs示例。 您可以将服务注入Functions.cs,以便不同的服务处理不同的队列(如果您愿意)。

    private readonly IMyService _myService;

    //You can use Dependency Injection if you want to. 
    public Functions(IMyService myService)
    {
        _myService = myService;
    }

    public void ProcessQueue1([QueueTrigger("queue1")] string item)
    {
        //You can get the message as a string or it can be strongly typed
        _myService.ProcessQueueItem1(item);
    }

    public void ProcessQueue2([QueueTrigger("queue2")] MyObject item)
    {
        //You can get the message as a string or it can be strongly typed
        _myService.ProcessQueueItem2(item);
    }

希望这有帮助

答案 1 :(得分:1)

正如@lopezbertoni建议我在函数中创建了两个方法,并且我使用了IJobActivator将类注入到函数中。见下面的例子:

        new webpack.ProvidePlugin({
        jQuery: 'jquery',
            $: 'jquery',
            jquery: 'jquery'
    })