Как указать конкретную конечную точку с темой / подпиской в ​​Azure ServiceBusTriggerAttribute? - PullRequest
0 голосов
/ 21 февраля 2020

Я создал служебную шину topi c ( my-topi c) в моей учетной записи Azure. Я создал правило только для прослушивания ( listen_rule ) для этой топи c, а также подписку на эту топи c ( my-subscription ), чтобы мой код вызывал вкл.

Как добавить указанную c подписку / правило к [ServiceBusTrigger]?

В app.config у меня есть этот раздел конфигурации:

<add key="MySubscription" value="my-subscription" />
<add key="MyTopic" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX=;EntityPath=my-topic"/>

В моем коде у меня есть:

    public async Task ProcessMyMessageAsync(
        [ServiceBusTrigger("%MyTopic%", "%MySubscription%")]
        BrokeredMessage brokeredMessage)

Это вызывает исключение:

Путь / имя объекта 'Endpoint = sb: //XXXX.servicebus.windows. net /; SharedAccessKeyName = listen_rule; SharedAccessKey = XXXX =; EntityPath = topi c 'превышает ограничение в 50 символов.

В Интернете я нашел множество примеров, где есть Строка подключения generi c AzureWebJobsServiceBus, но она дает доступ ко всей служебной шине, я хочу заблокировать ее для этой конкретной темы / правила.

ps Я использую. NET framework 4.5.2 (да, я знаю, это старое приложение) и Microsoft. Azure .WebJobs.ServiceBus 2.0.0.

pps В идеале, я бы хотел ke, если возможно, указать всю подписку в одной строке конфигурации.

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Есть два способа получить триггер служебной шины, один из них - webjob, а другой - функция azure. Я проверяю, что пакет Microsoft.Azure.WebJobs.ServiceBus 2.0.0 выглядит так, как будто этот триггер не поддерживает свойство подключения.

В основном, я полагаю, вы хотите использовать webjob sdk. Итак, ниже моя среда.

  • Microsoft. Azure .WebJobs 2.0.0
  • Microsoft. Azure .WebJobs.Core 2.0.0
  • Microsoft . Azure .WebJobs.ServiceBus 2.0.0

В app.config я устанавливаю соединение AzureWebJobsServiceBus.

<connectionStrings>

    <add name="AzureWebJobsDashboard" connectionString="" />
    <add name="AzureWebJobsStorage" connectionString="" />
    <add name="AzureWebJobsServiceBus" connectionString="service bus connection string"/>
  </connectionStrings>

Тогда ниже мой Program.cs .

using Microsoft.Azure.WebJobs;

namespace WebJob1
{

    class Program
    {

        static void Main()
        {
            var config = new JobHostConfiguration();
            config.UseServiceBus();

            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();

            }

            var host = new JobHost(config);
            // The following code ensures that the WebJob will be running continuously
            host.RunAndBlock();
        }
    }
}

А ниже мой Function.cs . Я установил соединение с атрибутом ServiceBusAccount. Я нашел это здесь: Атрибуты и аннотации .

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.ServiceBus.Messaging;

namespace WebJob1
{
    public class Functions
    {

        [ServiceBusAccount("AzureWebJobsServiceBus")]
        public static void ProcessQueueMessage([ServiceBusTrigger(topicName:"testtopic",subscriptionName:"testsub", access: AccessRights.Manage)] string message, TextWriter log)
        {
            log.WriteLine(message);
        }
    }
}

И вот мой скриншот теста.

enter image description here

А если вам нужна функция azure, вы можете обратиться к официальному учебнику: Создать свою первую функцию с помощью Visual Studio и эту привязку к служебной шине (другие страницы содержат информацию о триггере )

Надеюсь, это поможет вам, если у вас все еще есть другие проблемы, пожалуйста, дайте мне знать.

0 голосов
/ 24 февраля 2020

Я собираюсь ответить на это сам, если кто-нибудь еще обнаружит эту проблему:

Мне не хватало строки подключения:

<connectionStrings>
  <add name="AzureWebJobsMyEndPoint" connectionString="Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX"/>
</connectionStrings>
<appSettings>
  <add key="MySubscription" value="subscription-name"/>
  <add key="MyTopic" value="topic-name"/>
</appSetting>

И мне нужно было ServiceBusAccountAttribute на триггере :

public async Task ProcessMyMessageAsync(
    [ServiceBusAccount("MyEndPoint")]
    [ServiceBusTrigger("%MyTopic%", "%MySubscription%", AccessRights.Listen)]
    BrokeredMessage brokeredMessage)

Обратите внимание, как ServiceBusAccount использовал MyEndPoint , но строка подключения использует его в качестве суффикса для AzureWebJobs .

0 голосов
/ 21 февраля 2020

Попробуйте, это принимает ваше имя topi c, имя подписки и строку подключения сервисной шины в качестве параметров,

public async Task ProcessMyMessageAsync([ServiceBusTrigger("%MyTopic%","%MySubscription%", Connection = "ServiceBusEndPoint")]BrokeredMessage brokeredMessage)

и в ваших настройках приложения

<add key="MySubscription" value="my-subscription" /> <add key="MyTopic" value="my-topic"/> <Add Key="ServiceBusEndPoint" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX="/>

Если это не сработает, попробуйте добавить servicebusendpoint в строку подключения вместо настройки приложения, которая должна работать.

обновление для Microsoft. Azure .WebJobs.ServiceBus 2.0.0.

use может настроить строку подключения служебной шины и строку подключения хранилища здесь в program.cs

`

    static void Main()
    {
        var config = new JobHostConfiguration("your storage connection string ");

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();

        }
        config.UseServiceBus(new ServiceBusConfiguration() { ConnectionString = "your servcebus connection string " });
        var host = new JobHost(config);
        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    }
`

// Пожалуйста, установите следующие строки подключения в app.config для выполнения этой веб-работы: // AzureWebJobsDashboard и AzureWebJobsStorage

...