You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter(含桌面应用)中通过连接字符串连接Azure Service Bus?

在Flutter中连接Azure Service Bus的方案

1. 使用社区维护的Dart包

目前没有官方的Flutter专属Azure Service Bus包,但可以使用社区维护的azure_service_bus包,它支持通过连接字符串直接初始化客户端,兼容移动和桌面平台(Windows、macOS、Linux)。

示例代码

import 'package:azure_service_bus/azure_service_bus.dart';

void main() async {
  // 从Azure门户获取的服务总线连接字符串
  const connectionString = "Endpoint=sb://your-namespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=your-access-key";
  const targetQueue = "your-queue-name";

  // 发送消息
  final sender = ServiceBusSender.fromConnectionString(connectionString, targetQueue);
  await sender.sendMessages([ServiceBusMessage(body: "Flutter -> Azure Service Bus")]);
  await sender.close();

  // 接收并处理消息
  final receiver = ServiceBusReceiver.fromConnectionString(connectionString, targetQueue);
  final messages = await receiver.receiveMessages(maxMessages: 1);
  for (final msg in messages) {
    print("Received message: ${msg.body}");
    await receiver.completeMessage(msg); // 标记消息为已处理
  }
  await receiver.close();
}

依赖配置

在pubspec.yaml中添加包依赖:

dependencies:
  azure_service_bus: ^latest-version # 替换为最新版本号

2. 直接调用Azure Service Bus REST API

如果对第三方包的兼容性有顾虑,可以直接通过HTTP请求调用Azure Service Bus的REST API,仅需用连接字符串生成授权签名即可,完全跨平台(包括桌面)。

示例代码(发送消息到队列)

import 'dart:convert';
import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:http/http.dart' as http;

void sendMessageViaRest() async {
  const namespace = "your-namespace";
  const queueName = "your-queue-name";
  const sasKeyName = "RootManageSharedAccessKey";
  const sasKey = "your-access-key";

  final endpoint = "https://$namespace.servicebus.windows.net/$queueName/messages";
  final uri = Uri.parse(endpoint);
  
  // 生成SAS授权签名
  final expiry = (DateTime.now().millisecondsSinceEpoch ~/ 1000 + 3600).toString(); // 1小时有效期
  final stringToSign = Uri.encodeFull(uri.toString()) + "\n" + expiry;
  final hmac = Hmac(sha256, utf8.encode(sasKey));
  final digest = hmac.convert(utf8.encode(stringToSign));
  final signature = base64.encode(digest.bytes);
  final authHeader = "SharedAccessSignature sr=${Uri.encodeFull(uri.toString())}&sig=${Uri.encodeComponent(signature)}&se=$expiry&skn=$sasKeyName";

  // 发送HTTP请求
  final response = await http.post(
    uri,
    headers: {
      "Authorization": authHeader,
      "Content-Type": "application/json",
    },
    body: json.encode({"content": "Message via REST API from Flutter Desktop"}),
  );

  response.statusCode == 201 
      ? print("Message sent successfully") 
      : print("Failed to send message: ${response.body}");
}

关于Flutter桌面应用的连接可行性

完全可以通过连接字符串实现连接。连接字符串包含了Azure Service Bus的地址、授权密钥等所有必要信息,桌面平台和移动平台在认证逻辑上没有差异。注意不要将连接字符串硬编码到公开代码中,桌面应用可通过环境变量或本地配置文件存储该凭证。

内容的提问来源于stack exchange,提问作者shlyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:55:44