Как создать имя очереди на основе конфигурации для обработки веб-заданий?
У меня есть приложение webjob для обработки очереди ServiceBus, которая работает нормально, со следующим методом:
public static void ProcessQueueMessage([ServiceBusTrigger("myQueueName")] BrokeredMessage message, TextWriter log)
Однако я хотел бы иметь возможность изменить имя очереди без перекомпиляции, например, в соответствии с конфигурацией appsetting, можно ли это сделать?
2 ответа:
Я нашел реализацию INameResolver, используя параметр конфигурации из azure-webjobs-sdk-samples.
/// <summary> /// Resolves %name% variables in attribute values from the config file. /// </summary> public class ConfigNameResolver : INameResolver { /// <summary> /// Resolve a %name% to a value from the confi file. Resolution is not recursive. /// </summary> /// <param name="name">The name to resolve (without the %... %)</param> /// <returns> /// The value to which the name resolves, if the name is supported; otherwise throw an <see cref="InvalidOperationException"/>. /// </returns> /// <exception cref="InvalidOperationException"><paramref name="name"/>has not been found in the config file or its value is empty.</exception> public string Resolve(string name) { var resolvedName = CloudConfigurationManager.GetSetting(name); if (string.IsNullOrWhiteSpace(resolvedName)) { throw new InvalidOperationException("Cannot resolve " + name); } return resolvedName; } }
Да, вы можете это сделать. Вы можете реализовать свой собственныйINameResolver и установить его на JobHostConfiguration.NameResolver . Затем, вы можете использовать имя очереди, как %моя_очередь% в нашем ServiceBusTrigger атрибут - время выполнения вызова ваш INameResolver решить, что %myqeuue% переменной вы можете использовать любой пользовательский код, который вы хотите разрешить имя. Вы можете прочитать его из настроек приложения и т. д.