我在 Azure 帐户中创建了一个服务总线主题 ( my-topic )。 我在该主题上创建了一个只听规则 ( listen_rule ),以及对该主题的订阅 ( my-subscription ),以便我的代码触发。

如何将该特定订阅/规则添加到[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=topic”超过了“50”个字符的限制。

我在网上找到了很多例子,其中有一个通用的AzureWebJobsServiceBus连接字符串,但是它可以访问整个服务总线,我想将它锁定到这个特定的主题/规则。

ps 我正在使用 .NET 框架 4.5.2(是的,我知道,这是一个旧应用程序)和 Microsoft.Azure.WebJobs.ServiceBus 2.0.0。

pps 理想情况下,如果可能,我想在一个配置行中指定整个订阅。

#1楼 票数:0

试试这个,它将您的主题名称、订阅名称和服务总线连接字符串作为参数,

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 的更新。

用户可以在 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 中设置以下连接字符串以运行此 WebJob: // AzureWebJobsDashboard 和 AzureWebJobsStorage

#2楼 票数:0

获取服务总线触发器有两种方式,一种是webjob,一种是azure function。 我检查了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属性设置了连接。 我在这里找到它: Attributes and annotations

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);
        }
    }
}

这是我的测试截图。

在此处输入图片说明

如果你想要的是 azure 函数,你可以参考官方教程: 使用 Visual Studio 创建你的第一个函数和这个服务总线绑定(其他页面有触发器信息)

希望这可以帮助您,如果您还有其他问题,请随时告诉我。

#3楼 票数:0 已采纳

我将自己回答这个问题,以防其他人发现这个问题:

我错过了一个连接字符串:

<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的后缀。

  ask by Neil translate from so

未解决问题?本站智能推荐:

1回复

从Azure主题接收消息产生null,主题具有未读消息

昨天我能够重复阅读我自己创建的Azure Service Bus主题订阅中的消息。 然而,今天,虽然使用与昨天相同的代码,但是尽管订阅的消息计数远高于0,但所有消息都为空。让我详细说明: 按照MSDN网站上有关如何从订阅中读取消息的说明 ,我使用以下内容从订阅客户端读取消息: 今天,b
1回复

Azure服务总线权限是否传递到其子主题和队列

天蓝色,我创建了一条服务总线。 在服务总线中,我创建了一个主题。 在服务总线中,有一个默认的RootManageSharedAccessKey共享访问策略,其中设置了管理发送和监听权限。 使用Microsoft.ServiceBus api,我通过CreateFromConnection
1回复

Azure服务总线-多个主题?

因此,我简要介绍了我目前正在使用的工具: 我正在决定是否可以使用1个主题来进行此操作,而不是需要N个主题,并且都可以使用相关的元数据/过滤器来做到这一点。 我几乎有三件; 一个套接字服务器(工作者角色),在该服务器中,该字段中的单元连接到该服务器,Azure Service Bus消息
1回复

在MVC3中实现WindowsAzure服务总线主题/订阅吗?

这是场景:我们正在实现一个应用程序,该应用程序允许用户与本地端点“通信”。 我们正在做一些研究, Windows Azure Service Bus主题似乎是一个不错的选择,因为它可以帮助我们创建双向通信,并帮助我们解决防火墙,NAT设备的问题。 但是,由于用户通过无状态Web应用程序(在
1回复

如何根据BrokeredMessage类的内置属性过滤ServiceBus主题订阅?

使用2012年6月的Azure SDK,我有一个服务总线主题,我正在添加订阅。 我想过滤该订阅。 如果我根据我添加到BrokeredMessage Properties包中的一个项目执行此操作,那么这样可以正常工作: 但是,如果我这样做,但是将过滤器值添加到BrokeredMessag
1回复

如果设置了AutoDeleteOnIdle,服务总线是否删除没有过滤器/规则的主题订阅?

下午好。 我们使用Service Bus Topics作为pub / sub系统的引擎。 我们的逻辑涉及我们的C#服务连接到订阅主题。 我们删除$ Default(TrueFilter)并将AutoDeleteOnIdle设置为5分钟。 由于系统的其他部分需要的东西,他们告诉我们的C
1回复

MicrosoftAzureServiceBusAPI-如何在订阅说明上添加AutoDeleteOnIdle

我正在尝试制作一个使用服务总线API客户端的小型库。 我遵循了本教程以实现此目标,除一件事情外,我几乎做了所有我需要做的事情,为新创建的订阅添加了AutoDeleteOnIdle属性。 事情是,在本教程中,作者使用xml正文发送到API,并且运行良好,但是我想在xlm Subscripti
1回复

无法连接到AzureServiceBus主题

我已经创建了一个小的Poc来向Azure Service Bus主题发送消息。我的代码正在运行,没有任何异常,但是在Azure Service Bus主题中看不到消息。 如果有人对此有任何想法,请提出解决方案。 班级计划 我附上我的代码和Azure门户详细信息的快照。 C#代码 A