入门
建筑
专用服务平台
运输
坚持不懈
服务洞察力
服务脉冲
服务控制
监测
样品

Azure功能与Azure服务总线(进程中)

具有的主机NServiceBus终结点Azure函数Azure服务总线触发器。

基本用法

终结点配置

可以使用使用NServiceBus启动类中的扩展方法:

[程序集:功能启动(类型(启动))][程序集:NServiceBusTriggerFunction(“MyFunctionsEndpoint”)]类启动:函数启动{公共重写void配置(IFunctionsHostBuilder生成器){建设者。使用服务总线();}}

从环境变量中检索其他配置设置。请参阅配置部分了解更多详细信息。也可以通过代码直接配置所有配置设置:

类启动:函数启动{公共重写void配置(IFunctionsHostBuilder生成器){建设者。使用NServiceBus(配置=>{配置。运输。订阅命名约定=(name)=>name。替换(“X”、“Y”);});}}

通过注册的任何服务IFunctionsHostBuilder(功能主机生成器)将通过依赖项注入提供给消息处理程序。启动类必须通过功能启动属性:[程序集:函数启动(类型为(启动))].

NServiceBus的Azure函数队列触发器

通过使用自定义程序集属性指定逻辑端点名称,自动生成NServiceBus的Azure函数触发器:

[程序集:NServiceBusTriggerFunction(“MyFunctionsEndpoint”)]

该属性将生成NServiceBus所需的触发函数:

覆盖触发器函数名

默认情况下,触发器函数名是自动生成的。要自定义函数名NServiceBusTriggerFunction服务总线触发器功能属性可以提供一个附加参数来设置函数名:

[程序集:NServiceBusTriggerFunctionAttribute(端点名称:“MyFunctionsEndpoint”,TriggerFunctionName:“MyTrigger函数”)]

自定义触发器

Azure Service Bus触发器可以手动声明,而不是依赖自动生成的触发器。请参阅上的文章自定义Azure函数触发器了解更多信息。

在消息处理程序外部进行调度

使用HTTP函数触发消息:

公共类HttpSender{只读IFunctionEndpoint函数Endpoint;公共HttpSender(IFunctionEndpoint functionEndpoint){this.functionEndpoint=函数端点;}[FunctionName(“HttpSender”)]公共异步任务<IActionResult>运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ExecutionContext ExecutionContext,ILogger记录器){记录器。LogInformation(“C#HTTP触发器函数收到请求。”);var sendOptions=新的sendOptions();sendOptions(发送选项)。路由到该端点();等待函数Endpoint。发送(new TriggerMessage(),sendOptions,executionContext,logger);return new OkObjectResult($“{nameof(TriggerMessage)}已发送。”);}}

运输配置约束和限制

配置API通过配置。运输属性以允许自定义。然而,并非所有选项都是适用于在Azure函数中执行.

并发相关设置通过Azure函数进行控制主机。杰森配置文件。请参见Azure函数中的并发性了解详细信息。

消息一致性

NServiceBus可以在传入和传出消息之间提供事务一致性:

[程序集:NServiceBusTriggerFunction(“MyEndpoint”,SendsAtomicWithReceive=true)]

这相当于发送原子并接收运输交易模式。默认情况下,事务一致性被禁用,提供与仅接收运输交易模式。

有关使用自定义触发器配置消息一致性的更多信息,请参阅自定义Azure函数触发器文档。

配置

服务总线触发的端点配置按以下顺序从Azure Function主机环境加载某些配置值:

  • I配置通过构造函数传入
  • 环境变量

ServiceBus连接

使用时NServiceBusTriggerAttribute服务总线触发属性,可以通过多种方式配置到Azure Service Bus的连接:

  • 仅使用<连接名称>键,该值设置为要连接到的ServiceBus命名空间的连接字符串。
  • 使用<CONNECTION_NAME_PREFIX>__fullyQualifiedNamespace(连接名称_PREFIX)以及前缀相同的其他连接属性<连接名_PREFIX>,如基于身份的连接用于Azure函数。

如果同时指定了连接字符串和基于标识的连接值,则连接字符串将优先。默认值<连接名称><连接名_PREFIX>Azure网络作业服务总线,但是可以向连接上的属性NServiceBusTriggerAttribute服务总线触发属性

基于连接字符串的连接示例:

{“IsEncrypted”:false,“价值观”:{...“AzureWebJobsServiceBus”:“端点=sb://<namespace>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccess密钥;SharedAccess密钥=<namespace-shared-access-key>”,}}

基于身份的连接示例:

{“IsEncrypted”:false,“价值观”:{...“MyConnectionName__fullyQualifiedNamespace”:“<namespace>.servicebus.windows.net”,“MyConnectionName__tenantId”:“00000000-0000-0000-0000-00000000000”,“MyConnectionName__clientId”:“00000000-0000-0000-0000-000000000000000”,“MyConnectionName__clientSecret”:“<client-secret>”}}
[程序集:NServiceBusTriggerFunction(“WorkerDemoEndpoint”,Connection=“MyConnectionName”)]

其他配置

钥匙价值笔记
端点名称主机的NServiceBus端点的名称可以直接向构造函数提供值。
NSERVICEBUS_LICENSE公司NServiceBus许可证也可以通过提供serviceBusTriggeredEndpointConfig服务总线触发端点配置。端点配置。许可证(。..).
网站_网站_名称Azure Function应用程序的名称。在Azure中托管函数时提供。用于设置NServiceBus主标识符。如果未设置,则使用本地计算机名。

对于本地开发,请使用本地。设置。杰森。在Azure中,使用环境变量作为键指定函数设置。

{“IsEncrypted”:false,“价值观”:{...“NSERVICEBUS_LICENSE”:“<?xml version=\”1.0\“encoding=\”utf-8\“?><LICENSE id=\”1222e1d1-22222-4a46-b1c6-943c442ca710\“expiration=\”2113-11-30T00:00:0000000\“type=\”Standard\“LicenseType=\”标准\“LicesseVersion=\”4.0\“MaxMessageThroughputPerSecond=\”Max\“WorkerThreads=\”Max \“AllowedNumberOfWorkerNodes=\”Max\“>…</LICENSE>”}}

自定义诊断

NServiceBus启动诊断使用Azure函数时默认禁用。可以通过以下代码段将诊断写入日志:

公共重写void配置(IFunctionsHostBuilder生成器){建设者。UseNServiceBus(配置=>{配置。日志诊断();});}

诊断数据将与记录器标识一起写入启动诊断具有日志级别信息.

错误队列

为了将持续失败的消息移动到错误队列而不是Azure Service Bus死信队列的可恢复性,必须提前创建错误队列并使用以下API进行配置:

class EnableDiagnosticsOnStartup:函数Startup{公共重写void配置(IFunctionsHostBuilder生成器){建设者。使用NServiceBus(配置=>{配置。高级配置。发送失败消息到(“错误”);});}}

准备Azure Service Bus命名空间

功能端点无法在Azure Service Bus命名空间中创建自己的队列或其他基础结构。

使用asb传输命令行(CLI)工具为Function端点提供命名空间中的实体。

创建端点队列

asb-transport端点创建<队列名称>

请参阅完整文档对于asb-transport端点创建命令获取更多详细信息。

订阅活动

asb-transport端点订阅

请参阅完整文档对于asb-transport端点订阅命令获取更多详细信息。

组件扫描

组件扫描从两个位置加载部件:

  • 这个箱子Azure Functions应用程序的目录
  • Azure函数运行时目录

如果两个位置中都存在相同的程序集,则会引发异常,从而阻止端点运行。联系人特定软件支持寻求帮助。

包装要求

NServiceBus。AzureFunctions。工人。服务总线需要Visual Studio 2019和。NET SDK版本50300或更高。的旧版本。NET SDK可能会显示以下警告,阻止自动生成触发器定义:

CSC:警告CS8032:分析器NServiceBus的实例。AzureFunctions公司。SourceGenerator。无法从NServiceBus创建TriggerFunctionGenerator。AzureFunctions公司。SourceGenerator.dll:无法加载文件或程序集“Microsoft”。CodeAnalysis,版本=3.10.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35’。系统找不到指定的文件。。

从4.1.0版开始NServiceBus。AzureFunctions公司。工人。服务总线NServiceBus。AzureFunctions公司。进程中。服务总线,警告CS8032被视为错误。要抑制此错误,请更新项目的.csproj文件,以便在<属性组>顶部部分:

<WarningsAsErrors>

这将使CS8032恢复为警告状态,以便它不会停止生成过程。

样品

相关文章