欢迎使用 Swift 的 NATS 客户端,这是您在 Swift 应用程序中实现异步消息传递的入口。 这个客户端库旨在为 Swift 开发者提供一个与 NATS 消息传递的无缝接口,从而在分布式系统中实现快速高效的通信。
目前,该客户端支持 Core NATS,具有身份验证、TLS、跛脚鸭模式等功能。
JetStream、KV、对象存储、Service API 都在规划中。
加入 nats.io Slack 上的 #swift 频道。 我们将尽最大努力快速提供帮助。 您也可以随时过来打个招呼。 我们期待发展这个社区。
将此软件包作为依赖项包含在项目的 Package.swift
文件中,并将包名称添加到目标,如下例所示
// swift-tools-version:5.7
import PackageDescription
let package = Package(
name: "YourApp",
products: [
.executable(name: "YourApp", targets: ["YourApp"]),
],
dependencies: [
.package(name: "Nats", url: "https://github.com/nats-io/nats.swift.git", from: "0.1")
],
targets: [
.target(name: "YourApp", dependencies: ["Nats"]),
]
)
在 Xcode 中打开项目检查器,然后选择您的项目。 重要的是选择**项目**,而不是目标! 单击第三个选项卡 Package Dependencies
,然后通过选择包列表末尾的小 +
符号来添加 git url https://github.com/nats-io/nats.swift.git
。
这是一个快速入门示例,可以一览所有内容
import Nats
// create the client
let nats = NatsClientOptions().url(URL(string: "nats://:4222")!).build()
// connect to the server
try await nats.connect()
// subscribe to a subject
let subscription = try await nats.subscribe(subject: "events.>")
// publish a message
try await nats.publish("my event".data(using: .utf8)!, subject: "events.example")
// receive published messages
for await msg in subscriptions {
print( "Received: \(String(data:msg.payload!, encoding: .utf8)!)")
}
第一步是建立与 NATS 服务器的连接。 此示例演示如何使用默认设置连接到 NATS 服务器,默认设置假定服务器在默认端口 (4222) 上本地运行。 您还可以通过指定其他选项来自定义您的连接
let nats = NatsClientOptions()
.url(URL(string: "nats://:4222")!)
.build()
try await nats.connect()
建立与 NATS 服务器的连接后,下一步是发布消息。 将消息发布到主题允许任何已订阅的客户端异步接收这些消息。 此示例演示如何将简单的文本消息发布到特定主题。
let data = "message text".data(using: .utf8)!
try await nats.publish(data, subject: "foo.msg")
在更复杂的场景中,您可能希望以标头的形式在消息中包含其他元数据。 标头允许您将键值对与消息一起传递,为订阅者提供额外的上下文或指令。 此示例演示如何发布带有标头的消息
let data = "message text".data(using: .utf8)!
var headers = NatsHeaderMap()
headers.append(try! NatsHeaderName("X-Example"), NatsHeaderValue("example value"))
try await nats.publish(data, subject: "foo.msg.1", headers: headers)
在建立连接并将消息发布到 NATS 服务器之后,下一个关键步骤是订阅主题。 订阅使您的客户端能够侦听发布到特定主题的消息,从而促进异步通信模式。 此示例将指导您创建对主题的订阅,使您的应用程序能够处理接收到的传入消息。
let subscription = try await nats.subscribe(subject: "foo.>")
for try await msg in subscription {
if msg.subject == "foo.done" {
break
}
if let payload = msg.payload {
print("received \(msg.subject): \(String(data: payload, encoding: .utf8) ?? "")")
}
if let headers = msg.headers {
if let headerValue = headers.get(try! NatsHeaderName("X-Example")) {
print(" header: X-Example: \(headerValue.description)")
}
}
}
请注意,主题 foo.>
使用特殊的通配符语法,允许订阅主题的层次结构。 有关更多详细信息,请参阅 NATS 文档中关于基于主题的消息传递。
默认日志级别为 .info
。 您可以对其进行设置以查看更多或更少的详细消息。 可能的值为 .debug
、.info
、.error
或 .critical
。
// TODO
您还可以使用事件来监控您的应用程序何时连接、断开连接或遇到错误
let nats = NatsClientOptions()
.url(URL(string: "nats://:4222")!)
.build()
nats.on(.connected) { event in
print("event: connected")
}
为了确保在您的 AppDelegate.swift 或 SceneDelegate.swift 中正确管理连接,请按如下方式集成 NatsClient 连接管理
func sceneDidBecomeActive(_ scene: UIScene) {
Task {
try await self.natsClient.resume()
}
}
func sceneWillResignActive(_ scene: UIScene) {
Task {
try await self.natsClient.suspend()
}
}
此库基于 https://github.com/aus-der-Technik/SwiftyNats 中的出色工作