这是一个用于与 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")
内置了几种不同的消息类型,但您也可以实现自己的消息类型。 内置类型包括:
PlainTextMessage
– 带有字符串主体的简单消息。JSONMessage
– 使用 Swift 的 Encodable
协议的带有 JSON 主体的消息。ProtobufMessage
– 使用 swift-protobuf 的带有 protobuf 主体的消息。DataMessage
– 带有二进制主体的消息。您还可以通过实现 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。