【问题标题】:Azure Service bus 2.0 version trigger is not working in serverAzure 服务总线 2.0 版本触发器在服务器中不起作用
【发布时间】:2019-05-04 20:23:12
【问题描述】:

我创建了一个控制台用于向 Azure 服务总线主题发送消息,并创建了一个服务总线主题触发器。在本地它工作正常,但是在 azure 中部署相同的功能后,相同的代码不起作用。我是 Azure 的新手,请帮助解决问题并在下面获取我的代码详细信息。

host.json

{
  "version": "2.0",
  "aggregator": {
    "batchSize": 1000,
    "flushTimeout": "00:00:30"
  },
  "extensions": {
    "cosmosDb": {},
    "durableTask": {},
    "eventHubs": {},
    "http": {},
    "queues": {},
    "sendGrid": {},
    "serviceBus": {}
  },
  "functions": [],
  "functionTimeout": "00:05:00",
  "healthMonitor": {
    "enabled": true,
    "healthCheckInterval": "00:00:10",
    "healthCheckWindow": "00:02:00",
    "healthCheckThreshold": 6,
    "counterThreshold": 0.80
  },
  "logging": {
    "fileLoggingMode": "debugOnly",
    "logLevel": {
      "Function.MyFunction": "Information",
      "default": "None"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond": 5
      }
    }
  },
  "singleton": {
    "lockPeriod": "00:00:15",
    "listenerLockPeriod": "00:01:00",
    "listenerLockRecoveryPollingInterval": "00:01:00",
    "lockAcquisitionTimeout": "00:01:00",
    "lockAcquisitionPollingInterval": "00:00:03"
  },
  "watchDirectories": [ "Shared", "Test" ]
}

local.setting.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;....",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection": "Endpoint=sb://...."
  }
}

又试了一个

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "MyConnection": "Endpoint=sb://",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  },
  "Host": {
    "LocalHttpPort": 7077
  }
}

功能代码:

 [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("*****", "*****", Connection = "MyConnection")]string mySbMsg, ILogger log)
    {
        log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }

MyConnection--> 在这里传递服务总线连接字符串。

在本地我们可以获得调试点,如果我们尝试在另一台服务器上单独运行相同的功能,它不会监听请求。我在哪里做错了?帮我解决这个问题!

更新 此外,在发布 Azure 总线时,单击 Visual Studio 中的应用程序设置。然后,您还需要将连接字符串提供给远程。那么它肯定会起作用!

【问题讨论】:

  • 您无权将数据保存在服务器 c 盘上。所有数据必须保存在用户有权写入的客户端文件系统中。
  • 我需要在哪里授予权限@jdweng​​span>
  • 你永远不想在服务器上保存数据。数据始终在客户端(用户)文件系统上。

标签: c# azure azure-functions azureservicebus azure-servicebus-topics


【解决方案1】:

确保您已将MyConnection 放入 Azure 门户的应用程序设置中(平台功能> 应用程序设置> 应用程序设置部分),local.settings.json 未发布到 Azure。

我建议在 host.json 中删除除 "version": "2.0" 之外的其他设置。内容是说明host.json结构的示例,我们不需要全部,只要说明你需要的即可。

【讨论】:

  • 谢谢@jerry Liu
  • @RamaKrishnan 很高兴它提供了一些帮助,请注意您未标记答案,那么您遇到什么麻烦了吗?
  • @jeery:我无法标记这 2 个答案,这就是原因!
【解决方案2】:

您的 local.settings.json 文件将包含这 3 个值(以及其他值)...

"SvcBusConStr": "Endpoint=sb://myservicebus Con String",
"SvcBusTopicName": "my-topic-name",
"SvcBusSubscriptionName": "my-sub-name",

您在 Azure 中的应用程序配置屏幕页面将需要这 3 个条目

SvcBusConStr  Endpoint=sb://myservicebus Con String
SvcBusTopicName   my-topic-name
SvcBusSubscriptionName   my-sub-name

注意前两个参数上的百分号以读取应用程序环境设置。我还添加了明确的只听正确的。

 [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("%SvcBusTopicName%", "%SvcBusSubscriptionName%", AccessRights.Listen, Connection = "SvcBusConStr")]string mySbMsg, ILogger log)
    {
        log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
    }

我的回答可能无法完美涵盖 Azure Functions 2.0。

【讨论】:

  • 谢谢大家,我在我的应用程序中使用了这两种方案,现在可以正常工作了!谢谢!
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2021-08-14
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2023-02-14
  • 1970-01-01
相关资源
最近更新 更多