Google Cloud PubSub Swift 版

这是一个用于与 Google Cloud PubSub 交互的 Swift 实现,设计为服务器优先的解决方案。此软件包提供了一种高级别、类型安全的方式来与 Google Cloud PubSub 交互,同时保持卓越的性能。

此软件包的愿景是提供一种高级别但仍具有高性能的方式,以便从 Swift 与 PubSub 交互。

功能

本项目的目标是提供一种高级别且超级类型安全的方式来与 PubSub 交互。 欢迎通过创建 issue 或 pull request 的方式进行贡献。

用法

发布

let publisher = try await Publisher()
Task { publisher.run() }

extension Topics {

  static let myTopic = Topic<PlainTextMessage>(name: "my-topic")
}

try await publisher.publish(to: Topics.myTopic, body: "Hello")

内置了几种不同的消息类型,但您也可以实现自己的消息类型。 内置类型包括:

您还可以通过实现 Message 协议来实现自己的消息类型。

这是 JSONMessage 的一个示例

extension Topics {

  static let myTopic = Topic<JSONMessage<Message>>(name: "my-topic")
}

struct Message: Encodable {

    let data: String
}

try await publisher.publish(
    to: Topics.myTopic,
    body: Message(data: "Hello world!")
)

订阅

要使用拉取方式订阅主题,您需要实现一个处理所有传入消息的处理程序。 订阅也支持上述相同的消息类型。

示例

struct MyMessage: Decodable {

    let data: String
}

extension Topics {

  static let myTopic = Topic<JSONMessage<MyMessage>>(name: "my-topic")
}

struct MyHandler: Handler {

    let subscription = Subscription(name: "my-subscription", topic: Topics.myTopic)

    func handle(message: Incoming, context: Context) async throws {
        print("Message received: \(message.body.data)")
    }
}

let subscriber = try await PullSubscriber(handler: MyHandler())
try await subscriber.run()

也支持使用推送方式进行订阅。 这将启动一个 HTTP 服务器来处理消息。

示例

let subscriber = PushSubscriber()
subscriber.register(handler: MyHandler())
try await subscriber.run()

注意:由于模拟器不支持推送,推送订阅器在针对 Pub/Sub 模拟器进行本地开发期间将回退到拉取。

测试

该软件包包含一个测试模块 GoogleCloudPubSubTesting,该模块提供了用于测试您的 Pub/Sub 实现的实用程序。

import GoogleCloudPubSubTesting

let fakePublisher = FakePublisher()
// Use in your tests

许可证

MIT 许可证。 有关详细信息,请参阅 LICENSE

贡献

欢迎贡献! 请随时提交 Pull Request。