问题描述
如何在本地测试Azure Service Bus队列?
1。我必须将Queue重命名为其他名称,因为其他一些开发人员或已经运行的功能可能会使用它
Example:
a) Original Queue: Product
b) Test Queue: Test
2。我们还具有Azure功能来拾取队列,因此也要重命名服务总线触发器。
但是,它仍然无法正常工作吗?
是否需要更改其他内容?
我看到队列消息是通过Service Bus Explorer发送的,但是它们不是事件句柄,也不是我们的流程动作所响应。
[FunctionName(nameof(TestAsync))]
public async Task TestRollAsync(
[ServiceBusTrigger("test",Connection = "ServiceBusConnection",IsSessionsEnabled = false)] Message sbMessage)
{
var cmessage = Encoding.UTF8.GetString(sbMessage.Body);
Test msg = null;
try
{
msg = JsonConvert.DeserializeObject<Test>(cmessage);
}
解决方法
重命名队列不是最方便的方法,因为在提交代码时将需要撤消更改,这很容易出错。更好的选择是使用特定于开发人员的Azure服务总线名称空间,该名称空间可以使用MSDN /公司帐户在标准层上进行配置。您可以根据需要在标准层上具有多个名称空间。在配置和不使用其他名称空间时,除了每月10美元(或等值的您的货币)外,该服务不涉及其他任何费用。
每个开发人员都有一个命名空间,您的代码保持不变,并且连接字符串(值)可以在本地的settings.json
文件中更改,并且不应提交给存储库。这样,队列名称和连接字符串名称将保持不变,您可以在本地进行开发/调试
1。将Queue重命名为其他名称,因为其他一些开发人员或已经运行的功能可能会使用它。 (并且未设置Azure命名空间,如此处https://stackoverflow.com/a/63527807/12425844所示)
示例:
a)原始队列:产品
b)测试队列:测试
2。我们还具有Azure功能来拾取队列,因此也要重命名服务总线触发器。
[ServiceBusTrigger("test",Connection = "ServiceBusConnection",IsSessionsEnabled = false)] Message sbMessage)
{
3。确保解决方案中还运行了Azure Functions。
4。创建一个Azure Functions local.settings.json
{
"IsEncrypted": false,"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true","FUNCTIONS_WORKER_RUNTIME": "dotnet"
},"Host": {
"LocalHttpPort": 7071,"CORS": "*"
}
}