【问题标题】:is it possible it use IAsyncCollector without taking a dependency on azure webjobs?是否有可能在不依赖 azure webjobs 的情况下使用 IAsyncCollector?
【发布时间】:2020-01-05 23:37:37
【问题描述】:

我正在编写一个包含各种业务逻辑的库,并希望它能够与 azure 函数交互。我想收到一个消息接收器,用于接收我的代码希望生成的通知,并且 IAsyncCollector 似乎是一个合理的接口(它具有接近简单的 2 函数调用接口定义),它也可以在 azure 函数应用调用中简单地提供给我.

我正在编写的库是否有可能接受 IASyncColector,而不必将所有 azure webjobs 添加为我的库的依赖项,仅用于这个接口?

或者,内部代码是否应该只生成消息,并将它们返回到主机以添加到收集器,即使这是需要将每个函数调用包装在“foreach”中的杂乱代码?

https://github.com/Azure/azure-webjobs-sdk/blob/master/src/Microsoft.Azure.WebJobs/IAsyncCollector.cs

【问题讨论】:

    标签: azure azure-functions azure-webjobssdk


    【解决方案1】:

    假设如果有多条消息,您想要获取消息收集器。但是我不知道你为什么要使用IAsyncCollector,因为关于这种类型的描述是只写集合,你可以查看文档:Writing multiple output values。

    如果你不想使用 webjob sdk,那意味着你不能使用存储绑定,你仍然想对多条消息执行操作:

    接收消息,使用GetMessages方法,它会返回一个可枚举的消息集合。

    发送消息,只需使用 List 然后循环它并执行添加操作,或者只是绑定 CloudQueue 类型并使用 AddMessage 方法。

                CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
                CloudQueue queue1 = queueClient.GetQueueReference("myqueue");
                CloudQueue queue2 = queueClient.GetQueueReference("queue1");
                IEnumerable<CloudQueueMessage> messages= queue1.GetMessages(10);
                List<CloudQueueMessage> messages1=new List<CloudQueueMessage>();
                foreach (var message in messages) {
                    Console.WriteLine(message.AsString);
                    messages1.Add(message);
                }
                foreach (var message in messages1) {
                    queue2.AddMessage(message);
                }
    

    希望这对您有所帮助,如果您还有其他需要使用IAsyncCollector 的问题,请告诉我。

    【讨论】:

    • 是的,我确实想要只写集合,以便我的库可以产生一些输出,并且库的用户可以选择输出的位置。目前我的库可以在几个非天蓝色相关的地方使用,所以我不想只为 1 接口添加天蓝色的依赖。
    • 假设目前没有方法直接发送消息,你必须封装一个类来实现它。如果这对您有帮助,您可以接受它作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2014-05-16
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多