webjobs tutorial azure-webjobs

azure webjobs - tutorial - ¿Cómo establecer el nombre de la cola de Azure WebJob en el tiempo de ejecución?



azure web jobs tutorial (4)

Desafortunadamente, eso no es posible. Puede usar la interfaz de IBinder para vincularse dinámicamente a una cola, pero no tendrá el mecanismo de activación para ella.

Básicamente, el nombre de la cola de entrada debe estar codificado si desea desencadenantes. Para la salida, puede usar la interfaz mencionada anteriormente.

Aquí hay una muestra para IBinder . La muestra vincula un blob dinámicamente pero puede hacer algo muy similar para las colas.

Estoy desarrollando un archivo ejecutable de Azure WebJobs que me gustaría usar con varios sitios web de Azure. Cada sitio web necesitaría su propia cola de almacenamiento de Azure.

El problema que veo es que ProcessQueueMessage requiere que el nombre de la cola se defina estáticamente como un atributo del primer parámetro inputText . Prefiero que el nombre de la cola sea una propiedad de configuración de la instancia del sitio web de Azure en ejecución, y que el ejecutable del trabajo lo lea en tiempo de ejecución cuando se inicia.

¿Hay alguna manera de hacer esto?



Esto ahora puede hacerse. Simplemente crea un INameResolver para que puedas resolver cualquier cadena rodeada de signos de% (porcentaje). Por ejemplo, si esta es su función con un nombre de cola especificado:

public static void WriteLog([QueueTrigger("%logqueue%")] string logMessage) { Console.WriteLine(logMessage); }

Observe cómo hay% (porcentajes) de signos alrededor de la cadena de logqueue . Esto significa que el sistema de trabajo intentará resolver el nombre utilizando un INameResolver que puede crear y luego registrarse con su trabajo.

Aquí hay un ejemplo de una resolución que tomará la cadena especificada en los signos de porcentaje y la buscará en su AppSettings en el archivo de configuración:

public class QueueNameResolver : INameResolver { public string Resolve(string name) { return ConfigurationManager.AppSettings[name].ToString(); } }

Y luego en su archivo Program.cs, solo necesita conectar esto:

var host = new JobHost(new JobHostConfiguration { NameResolver = new QueueNameResolver() }); host.RunAndBlock();


Una implementación ligeramente mejor de la resolución de nombres para evitar recuperar de la configuración todo el tiempo. Utiliza el diccionario para almacenar los valores de configuración una vez recuperados.

using Microsoft.Azure.WebJobs; using System.Collections.Generic; using System.Configuration; public class QueueNameResolver : INameResolver { private static Dictionary<string, string> keys = new Dictionary<string, string>(); public string Resolve(string name) { if (!keys.ContainsKey(name)) { keys.Add(name, ConfigurationManager.AppSettings[name].ToString()); } return keys[name]; } }