当前位置: 首页 > 知识库问答 >
问题:

Azure 函数服务总线触发器依赖注入

景安翔
2023-03-14

我一直在尝试为Azure函数实现DI,其中函数由ServiceBus触发(本例中为主题/订阅):

[Singleton]
[FunctionName("Alert")]
public static async Task Alert([ServiceBusTrigger(Topic.Alert, Subscription.PowerBi, Connection = "servicebusconnectionstring")] Message message, [Inject]IPowerBiService powerBiService, [Inject]IQueueService queueService)

我在以下网站上阅读了有关Azure Functions和DI的信息:

  • https://mcguirev10.com/2018/04/03/service-locator-azure-functions-v2.html
  • https://blog.wille-zone.de/post/azure-functions-proper-dependency-injection/
  • https://github.com/introtocomputerscience/azure-function-autofac-dependency-injection

所有的例子都使用HTTP触发器,我假设IIS主机已经启动并运行,并且包含服务。但是使用ServiceBus触发器,我无法让它工作。我已经实现了上面提到的解决方案,还有一些解决方案,但都出现了同样的问题。代码可以工作,但是服务是为消息/触发器创建的。

任何设法做到这一点的人,或者不可能这样做吗?

注意(更新):我得到了一些更多的信息,我还没有时间核实,但我一直在为我的Azure功能使用消费计划。您可能需要一个应用服务计划(使用消费,因为这种价格模式更方便)。有没有人知道这方面的更多信息?我将在本周晚些时候调查此事。

共有1个答案

云季同
2023-03-14

我只是想确认现在使用应用服务计划而不是消费计划是否正常。不同的是“冷启动”而不是“热”主机。

我想所有不同的DI实现都应该可以正常工作。我一直在使用以下内容:https://github.com/MV10/Azure.FunctionsV2.Service.Locator

 类似资料:
  • 在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。

  • 我目前正在评估使用一个服务总线和azure函数来触发一些需要通过下游api调用来完成的工作。这都是相当标准的,只是我没有很好地处理当下游系统过载和/或返回header到trottle时会发生什么(即每分钟最大调用数/等)。对于队列触发器的强制节流,我们似乎没有任何动态控制。 我知道我们可以手动设置最大并发,但这并不一定解决问题,因为我们无法控制下游系统,需要考虑它随时可能脱机或变慢。 假设消费计划

  • 我已经创建了一个Azure webwork,它将向服务总线队列发送强类型消息,并成功发送。 我想创建另一个webjob,只要servicebus队列中有消息,就会触发该webjob。请在下面找到我正在尝试的代码。出于某种原因,尽管servicebus队列中有消息,但当我在本地运行webjob时,webjob未被触发并出现错误。 错误: 代码: 有谁能帮我解决这个问题吗? 谢谢

  • 我正在运行Visual Studio 2017预览并在本地运行函数代码,我正在使用开箱即用的Azure函数项目模板。我试图让一个由定时器触发的Azure函数使用输出绑定向服务总线队列发送消息,但WebJob SDK似乎无法将输出绑定到字符串类型。 结合 定时器功能 错误消息 TimerTriggerCSharp: Microsoft.Azure.WebJobs.Host: Error indexi

  • 根据https://docs.microsoft.com/en-us/Azure/Azure-functions/functions-bindings-service-bus-trigger?tabs=CSharp#usage(emphasis mine)的文档,是允许的参数类型之一: 下列参数类型可用于队列或主题消息: 字符串-如果消息是文本。 字节[]-用于二进制数据。 自定义类型-如果消息包