编程语言
首页 > 编程语言> > c# – 在Azure WebJob中动态启用/禁用触发的功能

c# – 在Azure WebJob中动态启用/禁用触发的功能

作者:互联网

我们有一个azure web作业,在functions.cs文件中有两个方法.这两个作业都是从Azure Service Bus中的不同主题触发的.

由于它在运行时使用反射来确定由命中主题的消息运行/触发的函数,因此代码中没有对这些方法的引用.

public static async Task DoWork([ServiceBusTrigger("topic-one", "%environmentVar%")] BrokeredMessage brokeredMessage, TextWriter log) {}

public static async Task DoOtherWork([ServiceBusTrigger("topic-two", "%environmentVar2%")] BrokeredMessage brokeredMessage, TextWriter log) {}

基于运行时设置的变量,我需要让这个Web作业同时运行这两种方法,或者只运行其中一种方法(它不会更改作业正在运行的一个,但是在作业启动时读入它) .我不能简单地将方法的内部包装在基于变量的if()中,因为它会读取并销毁消息.

是否可以使用JobHostConfiguration(一个IServiceProvider)来实现这一点,因为它是在运行时构建的.这是JobHostConfiguration.IJobActivator可以用于吗?

解决方法:

Webjob启动时可以禁用触发功能.

您可以查看此问题:Dynamic Enable/ Disable a function.

所以Webjob SDK提供了一个DisableAttribute`:

>可以在参数/方法/类级别应用
>仅影响触发的功能
> [Disable(“setting”)] – 如果指定的设置名称存在配置/环境值,并且其值为“1”或“True”(不区分大小写),则该功能将被禁用.
> [Disable(typeof(DisableProvider))] – 自定义类型,声明签名bool IsDisabled(MethodInfo方法)的功能.我们将调用此方法来确定是否应禁用该函数.
>这是仅启动时间检查.对于禁用的触发函数,我们只需跳过函数监听器的启动.但是,当您更新绑定到这些属性的应用程序设置时,WebJob将自动重新启动,您的设置将生效.
>设置名称可以包括绑定参数(例如{MethodName},{MethodShortName},%test%等)

在您的情况下,您需要使用DisableAttribute与DisableProvider.

public class DoWorkDisableProvider
{
    public bool IsDisabled(MethodInfo method)
    {
        // check if the function should be disable
        // return true or false

        return true;
    }
}

public class DoOtherWorkkDisableProvider
{
    public bool IsDisabled(MethodInfo method)
    {
        // check if the function should be disable
        // return true or false

        return true;
    }
}

您的函数应该使用disable属性进行修饰

[Disable(typeof(DoWorkDisableProvider))]
public static async Task DoWork([ServiceBusTrigger("topic-one", "%environmentVar%")] BrokeredMessage brokeredMessage, TextWriter log) {}

[Disable(typeof(DoOtherWorkkDisableProvider))]
public static async Task DoOtherWork([ServiceBusTrigger("topic-two", "%environmentVar2%")] BrokeredMessage brokeredMessage, TextWriter log) {}

否则,JobHostConfiguration.IJobActivator旨在将依赖项注入到您的函数中.你可以看一下这些与以下相关的帖子:

> Dependency injection using Azure WebJobs SDK?
> Azure Triggered Webjobs Scope for Dependency Injection

标签:c,azure,azure-webjobs,azure-webjobssdk
来源: https://codeday.me/bug/20190722/1501078.html