用 Swift 实现的 NATS 客户端

NATS 是一个开源的、云原生的消息系统。Apcera、百度、西门子、VMware、HTC 和 爱立信 等公司都依赖 NATS 的高性能和高弹性消息传递能力。

这是用 Swift 实现的 NATS 客户端/流媒体

构建于 Vapor 3,依赖 SwiftProto 和 Swift NIO

如果您有任何改进代码的想法,请联系我

配置文件

    services.register(NatsRouter.self) { _ -> (RouterController) in
        return RouterController()
    }
    
    services.register { container -> (NATS) in
        let servers = [natsServer(hostname: "0.0.0.0")]
        
        let natsConfig = NatsClientConfig(servers: servers, connectionType: .server(.multiple(1)), disBehavior: .reconnect, clusterName: "_STAN.discover.test-cluster", streaming: true)
        return try NATS(container: container, config: natsConfig)
    }

注意

连接类型

  1. 具有多个事件循环的服务器 (每个事件循环创建到 NATS 服务器的独立连接)
  2. 客户端 (如果当前事件循环没有连接,则创建连接)

RouterController 文件

class RouterController: Service, NatsRouter {
    func onOpen(handler: NatsHandler, ctx: ChannelHandlerContext) {
        print("OPEN")
    }
    
    func onStreamingOpen(handler: NatsHandler, ctx: ChannelHandlerContext) {
        print("STREAM OPEN")
    }
    
    func onClose(handler: NatsHandler, ctx: ChannelHandlerContext) {
        print("CLOSED")
    }
    
    func onError(handler: NatsHandler, ctx: ChannelHandlerContext, error: Error) {
        print("ERROR -> \(error.localizedDescription)")
    }
}

订阅

    handler.subscribe("Subject") { (msg) in
            
    }