首页 > 其他分享 >NATS初步学习

NATS初步学习

时间:2023-06-29 16:35:47浏览次数:60  
标签:学习 err NATS fmt nc server 初步 nats msg

服务端

package main

import (
        "fmt"

        "github.com/nats-io/nats-server/v2/server"
        "go.uber.org/automaxprocs/maxprocs"
)

func main() {
        exe := "nats-server"

        opts := DefaultOptions()

        // Create the server with appropriate options.
        s, err := server.NewServer(opts)
        if err != nil {
                server.PrintAndDie(fmt.Sprintf("%s: %s", exe, err))
        }

        // Configure the logger based on the flags
        s.ConfigureLogger()

        // Start things up. Block here until done.
        if err := server.Run(s); err != nil {
                server.PrintAndDie(err.Error())
        }

        // Adjust MAXPROCS if running under linux/cgroups quotas.
        undo, err := maxprocs.Set(maxprocs.Logger(s.Debugf))
        if err != nil {
                s.Warnf("Failed to set GOMAXPROCS: %v", err)
        } else {
                defer undo()
        }

        s.WaitForShutdown()
}

func DefaultOptions() *server.Options {
        return &server.Options{
                Host:     "127.0.0.1",
                Port:     4222,
                HTTPPort: -1,
                Cluster:  server.ClusterOpts{Port: -1, Name: "abc"},
                NoLog:    false,
                NoSigs:   true,
                Debug:    true,
                Trace:    true,
        }
}

发布者

package main

import (
        "fmt"
        "time"

        "github.com/nats-io/nats.go"
)

func main() {
        nc, _ := nats.Connect(nats.DefaultURL)
        // nc.Publish("ncp.foo", []byte("Boos升级"))

        nc.Subscribe("ncp.foo.response", func(msg *nats.Msg) {
                fmt.Println("---> 收到, ", string(msg.Data))
        })
        msg, err := nc.Request("ncp.foo", []byte("砍瓜切菜"), time.Second*30)
        if err != nil {
                panic(err)
        }
        fmt.Println(string(msg.Data))
        nc.Close()
}

订阅者

package main

import (
        "fmt"
        "os"
        "os/signal"
        "syscall"

        "github.com/nats-io/nats.go"
)

var (
        nc *nats.Conn
)

func Handler_Foo(msg *nats.Msg) {
        fmt.Println(string(msg.Data))

        fmt.Println(msg.Subject, msg.Reply)
        nc.Publish(msg.Reply, []byte("我收到你的消息了,"+string(msg.Data)))

        fmt.Println(msg.Subject, msg.Reply)
        msg.Reply = "ncp.foo.response"
        msg.Respond([]byte("我收到了,笋," + string(msg.Data)))

}

func GraceExit() {
        fmt.Println("退出")
}

func main() {
        nc, _ = nats.Connect(nats.DefaultURL)

        nc.Subscribe("ncp.foo", Handler_Foo)

        // 阻塞,收到系统信号退出
        sigs := make(chan os.Signal, 1)
        signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
        <-sigs
        GraceExit()
        nc.Close()
}

标签:学习,err,NATS,fmt,nc,server,初步,nats,msg
From: https://www.cnblogs.com/jiftle/p/17514518.html

相关文章

  • 一条从Java基础到Java开发各个方向的学习路线(书籍)
    一条从Java基础到Java开发各个方向的学习路线,按照难度递增的顺序排列:Java基础:《Java核心技术卷一》-CayS.Horstmann和GaryCornell《HeadFirstJava》-KathySierra和BertBatesJavaWeb开发:《HeadFirstServletsandJSP》-BryanBasham等《JavaWeb开发......
  • 关于学习Silverlight2.0的重要声明 ^_^
    我开始学习Silverlight的时,版本3都出来了。 看了一下苏鹏的《Silverlight探秘系列课程》。原本打算好好学习学习这个课程的,可他的代码实在是少的可怜。没几课是有代码的。忽然发现大大的浪费了我的时间。 于是终止这个课程的学习,起码我不能太过于一本正经的学习这个了。不过话又......
  • 深入学习 GC 算法 - 标记清除算法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • springboot入门教程,大家都是怎么学习的?
     学习SpringBoot可以帮助你提高Java后端开发的效率和质量,更快速地构建应用程序,并与当前的开发趋势保持一致。不过,建议你始终关注最新的版本和技术发展,及时了解并学习最新的特性和最佳实践。SpringBoot入门教程对于初学者来说是非常好学的。B站上动力节点王妈妈的springboot3教程......
  • springboot入门教程,大家都是怎么学习的?
    ​学习SpringBoot可以帮助你提高Java后端开发的效率和质量,更快速地构建应用程序,并与当前的开发趋势保持一致。不过,建议你始终关注最新的版本和技术发展,及时了解并学习最新的特性和最佳实践。​Springboot对于初学者来说是非常好学的。B站上动力节点王妈妈的springboot3教程......
  • 深入学习 JVM 垃圾回收算法
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌......
  • 搜索学习笔记
    MeetInTheMiddle折半搜索将需要搜索的数据集分成两部分,在两部分用\(f(n/2)\)的时间复杂度分别搜索,之后用\(g(n)\)的时间复杂度合并。如果\(g(n)\)和\(f(n/2)\)同级,那么解决问题的时间复杂度就能折半。......
  • Java学习——循环结构
    循环结构while循环do...while循环for循环在Java5中引入了一种主要用于数组的增强型for循环breakcontinue一、while循环while(布尔表达式){ //循环内容只要布尔表达式为true,循环就会一直执行下去我们大多数情况是会让循环停止下来的,我们需要一个让表达式失......
  • ExtJs学习
    ExtExt.onReady:准备函数,执行时机是DOM对象加载完毕后JS三种函数构造形式arguments对象接受函数的实际参数用于做递归操作使用call指定函数执行的作用域函数.call(window,10,20,30),(作用域对象,参数1,参数2,参数3)apply作用一样,但是是传数组函数.apply(window,[2,3,4])......
  • Python学习笔记
    Python学习笔记2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加......