无需Azure订阅,能否本地部署Azure Service Bus收发消息?
无需Azure订阅本地试用Azure Service Bus的方法
当然有,你可以通过以下两种官方工具在本地模拟Azure Service Bus环境,完全不需要Azure订阅,就能用C#代码完成消息收发测试:
Azure Service Bus Emulator
这是微软专为Windows用户提供的本地模拟工具,完整复刻了Service Bus的核心功能(队列、主题、订阅、消息过滤等)。安装后直接启动,就能用预设的本地连接字符串调用Service Bus SDK,代码逻辑和云端完全一致。Azurite
微软目前更推荐的跨平台本地模拟工具,支持Windows、macOS和Linux,除了Service Bus,还能模拟Blob存储、Table存储等其他Azure服务。可以通过npm install -g azurite命令安装,或者用Docker容器运行。启动后使用本地连接字符串连接,API和真实Service Bus完全兼容,代码几乎不用修改就能无缝切换到云端环境。
简单C#代码示例
下面是用Azurite/Service Bus Emulator进行消息收发的基础代码:
using Azure.Messaging.ServiceBus; // 本地Service Bus连接字符串(Azurite或Emulator的默认密钥) var connectionString = "Endpoint=sb://localhost/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=your-local-access-key"; var queueName = "demo-queue"; // 发送消息 async Task SendTestMessage() { await using var client = new ServiceBusClient(connectionString); var sender = client.CreateSender(queueName); var message = new ServiceBusMessage("Hello from local Service Bus!"); await sender.SendMessageAsync(message); Console.WriteLine("消息发送完成"); } // 接收消息 async Task ReceiveTestMessage() { await using var client = new ServiceBusClient(connectionString); var processor = client.CreateProcessor(queueName); processor.ProcessMessageAsync += async args => { Console.WriteLine($"收到消息:{args.Message.Body.ToString()}"); await args.CompleteMessageAsync(args.Message); }; processor.ProcessErrorAsync += args => { Console.WriteLine($"发生错误:{args.Exception.Message}"); return Task.CompletedTask; }; await processor.StartProcessingAsync(); Console.WriteLine("等待消息中...按任意键停止"); Console.ReadKey(); await processor.StopProcessingAsync(); } // 执行收发逻辑 await SendTestMessage(); await ReceiveTestMessage();
注意事项
- Service Bus Emulator仅支持Windows系统,Azurite是跨平台的,功能更新更活跃。
- 两种工具的本地连接字符串可以在工具启动后的控制台或配置文件中找到,替换代码中的密钥即可。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

