zoukankan      html  css  js  c++  java
  • NATS_13:NATS Streaming案例讲解

    启动服务

      首先启动 go-nats-streaming 服务。为了更加能说明问题,我们启动的时候不使用默认端口号

     $ nats-streaming-server -p 4242 -m 8222 -DV
    

     编写一个简单的应用

    package main
    
    import (
        "log"
        "github.com/nats-io/go-nats-streaming"
    )
    
    func main() {
        //stan.Connect(clusterID, clientID, ops ...Option)
        ns, _ := stan.Connect("test-cluster", "myID", stan.NatsURL("nats://localhost:4242"))
    
        // Simple Synchronous Publisher
        // does not return until an ack has been received from NATS Streaming
        ns.Publish("foo", []byte("Hello World"))
    
        // Simple Async Subscriber
        sub, _ := ns.Subscribe("foo", func(m *stan.Msg) {
            log.Printf("Received a message: %s
    ", string(m.Data))
        }, stan.StartWithLastReceived())
    
        log.Printf("subscribing to subject 'foo' 
    ")
    
        // Unsubscribe
        sub.Unsubscribe()
    
        // Close connection
        ns.Close()
    }

      上面的代码使用了订阅者启动参数的 StartWithLastReceived,这个函数的含义为:读取刚才发布者最近发布的消息内容。具体还有哪些启动参数,以下列出详情:

    // Subscribe starting with most recently published value
    sub, err := sc.Subscribe("foo", func(m *stan.Msg) {
        fmt.Printf("Received a message: %s
    ", string(m.Data))
    }, StartWithLastReceived())
    
    // Receive all stored values in order
    sub, err := sc.Subscribe("foo", func(m *stan.Msg) {
        fmt.Printf("Received a message: %s
    ", string(m.Data))
    }, DeliverAllAvailable())
    
    // Receive messages starting at a specific sequence number
    sub, err := sc.Subscribe("foo", func(m *stan.Msg) {
        fmt.Printf("Received a message: %s
    ", string(m.Data))
    }, StartAtSequence(22))
    
    // Subscribe starting at a specific time
    var startTime time.Time
    ...
    sub, err := sc.Subscribe("foo", func(m *stan.Msg) {
        fmt.Printf("Received a message: %s
    ", string(m.Data))
    }, StartAtTime(startTime))
    
    // Subscribe starting a specific amount of time in the past (e.g. 30 seconds ago)
    sub, err := sc.Subscribe("foo", func(m *stan.Msg) {
        fmt.Printf("Received a message: %s
    ", string(m.Data))
    }, StartAtTimeDelta(time.Duration(30)))
  • 相关阅读:
    Objective
    ios 贝塞尔画图
    M端的飞行宝石代码(启发性代码)
    T端单机定时间随机召唤生物的脚本
    T端升级宝石
    Xcode中如何屏蔽某个源文件的编译警告信息
    xcode合并模拟器和真机静态库的编译
    layoutSubviews setNeedsDisplay
    限制只能输入数字字母
    正确使用Block避免Cycle Retain和Crash
  • 原文地址:https://www.cnblogs.com/liang1101/p/6679648.html
Copyright © 2011-2022 走看看