NATS系统通常由一个带有nats或tls协议的标准URL标识,例如nats://demo.nats.io。NATS系统可以是单个服务器、小型集群或全局超级集群。在这些示例中,我们将依赖nats.io提供的单个测试服务器,位于nats://demo.nats.io,使用4222作为默认端口。

NATS还支持通过TLS协议使用安全连接。大多数客户端支持使用URL协议tls自动检测安全连接。在tls://demo.nats.io:4443还有一个运行TLS的演示服务器。协议要求对于多个客户端库是可选的,因此您可以使用demo.nats.io:4222作为URL,并让客户端和服务器决定是否需要TLS。

NATS连接有很多选项,从超时到重新连接设置。

连接到默认服务器

一些库还提供了一种连接到默认url的特殊方式,通常是nats://localhost:4222:

nc, err := nats.Connect(nats.DefaultURL)
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

连接到特定服务器

NATS客户端库可以使用完整的URL nats://demo.nats.io:4222来指定要连接到的特定服务器主机和端口。
库正在删除显式协议的要求,并可能允许demo.nats.io:4222或仅允许demo.nats.io。在后面的示例中,将使用默认端口4222。请查看特定客户机库的文档,以查看支持哪些URL格式。
例如,要使用URL连接到演示服务器,可以使用:

// If connecting to the default port, the URL can be simplified
// to just the hostname/IP.
// That is, the connect below is equivalent to:
// nats.Connect("nats://demo.nats.io:4222")
nc, err := nats.Connect("demo.nats.io")
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection nc = Nats.connect("nats://demo.nats.io:4222");

连接到群集

当连接到集群时,有一些事情需要考虑。

  • 为每个群集成员传递URL(半可选)
  • 连接算法
  • 重新连接算法(稍后讨论)
  • 服务器提供的URL

当客户端库首次尝试连接时,它将使用由连接选项或函数提供的url列表。这些url通常是按随机顺序检查的,这样就不会让每个客户端连接到同一个服务器。使用第一个成功的连接。可以显式禁用随机化。

客户端连接到服务器后,服务器可以为其提供已知服务器的URL列表。这允许客户端连接到一台服务器后,在重连期间仍有其他服务器可用。

为了确保初始连接,您的代码应该包含一个合理的前端服务器或种子服务器列表。这些服务器可能知道集群的其他成员,并可能告诉客户机这些成员。但您不必配置客户端来传递集群中每个有效成员到connect方法中。

通过(在连接时)提供传递多个连接选项的能力,NATS可以处理机器故障或客户端不可用的情况。通过添加服务器向客户机提供已知服务器列表的功能,作为客户机-服务器协议的一部分,集群创建的网格可以在客户机运行时有机地增长和更改。

注意,失败行为依赖于库,请查看客户端库的文档,了解如果连接失败会发生什么情况。

servers := []string{"nats://127.0.0.1:1222", "nats://127.0.0.1:1223", "nats://127.0.0.1:1224"}nc, err := nats.Connect(strings.Join(servers, ","))
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

连接名

可以为连接分配一个名称,该名称将出现在某些服务器监视数据中。此名称不是必需的,但强烈建议使用此名称,因为友好的连接名称将有助于监视、错误报告、调试和测试。

nc, err := nats.Connect("demo.nats.io", nats.Name("API Name Option Example"))
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

设置连接超时时间

每个库都有自己的语言首选方式来传递连接选项。最常见的选项之一是连接超时。它限制了建立到服务器的连接所需的时间。如果提供多个URL,则此超时将分别应用于每个群集成员。要将连接服务器的最长时间设置为10秒,请执行以下操作:

nc, err := nats.Connect("demo.nats.io", nats.Name("API Options Example"), nats.Timeout(10*time.Second))
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

ping/pong协议

客户机和服务器使用一个简单的PING/PONG协议来检查它们中的任何一个仍然连接到另一个。客户端将定期对服务器执行ping操作,服务器将以pong响应。

一旦达到未完成ping的可配置最大值(没有单个pong回复),连接将作为陈旧连接被关闭。这两个值一起定义了连接的超时,该超时指定了客户机收到问题通知的速度。当远程网络分区存在操作系统未检测到套接字错误时,这也会有帮助。连接关闭后,客户端将尝试重新连接。当它知道其他服务器时,下一步将尝试连接这些服务器。

在存在拥塞(如消息或客户端PING)时,服务器不会启动PING/PONG交互。

对于流量很大的连接,客户机通常会发现PING之间存在问题,因此默认PING间隔通常为几分钟。要将间隔设置为20秒并将未完成的ping限制为5次,从而在100秒不活动后强制关闭连接:

// Set Ping Interval to 20 seconds
nc, err := nats.Connect("demo.nats.io", nats.Name("API Ping Example"), nats.PingInterval(20*time.Second), nats.MaxPingsOutstanding(5))
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

关闭echo消息

默认情况下,如果连接对已发布的主题也感兴趣,则NATS连接将回显消息。这意味着,如果连接上的发布者向某个主题发送消息,则同一连接上的任何订阅服务器都将收到该消息。客户机可以选择关闭此行为,这样无论是否感兴趣,消息都不会传递到同一连接上的订阅服务器。

NoEcho选项在所有应用程序订阅并发布到同一主题的总线模式中非常有用。通常,发布表示应用程序已经知道状态更改,因此在应用程序发布更新的情况下,不需要处理更新本身。

请记住,每个连接都必须关闭echo,并且是每个连接,而不是每个应用程序。此外,打开和关闭echo可能会导致应用程序通信协议的重大更改,因为消息将根据此设置流动或停止流动,而订阅代码不会显示任何原因。

// Turn off echo
nc, err := nats.Connect("demo.nats.io", nats.Name("API NoEcho Example"), nats.NoEcho())
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

其他功能

本节包含各种连接功能和选项。

获取最大负载大小

虽然客户端无法控制最大负载大小,但客户端可以为应用程序提供一种在建立连接后获取配置的最大负载的方法。这将允许应用程序根据需要对通过服务器的数据进行分块或限制。

nc, err := nats.Connect("demo.nats.io")
if err != nil {log.Fatal(err)
}
defer nc.Close()mp := nc.MaxPayload()
log.Printf("Maximum payload is %v bytes", mp)// Do something with the max payload
打开Pedantic模式

NATS服务器提供了一种迂腐的模式,可以对协议执行额外的检查。
这种检查的一个例子是用于发布的主题是否包含通配符。服务器不会将其用作通配符,因此会忽略此检查。
默认情况下,此设置处于禁用状态,但您可以将其打开以测试应用程序:

opts := nats.GetDefaultOptions()
opts.Url = "demo.nats.io"
// Turn on Pedantic
opts.Pedantic = true
nc, err := opts.Connect()
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection
设置最大控制线大小

客户机和服务器之间的协议相当简单,依赖于控制线,有时还依赖于主体。控制行包含正在发送的操作,如PING或PONG,后跟回车和换行、CRLF或“\r\n”。服务器有一个最大控制线选项,可以限制控制线的最大大小。对于PING和PONG,这并不起作用,但是对于包含主题名和可能的队列组名的消息,控制行长度可能很重要,因为它有效地限制了可能的组合长度。一些客户端将尝试在内部限制控制行大小,以防止服务器出错。这些客户端可能允许也可能不允许您设置正在使用的大小,但如果允许,则应将大小设置为与服务器配置匹配。
不建议将此值设置为高于其他客户端或nats服务器的值。
例如,要将最大控制线大小设置为2k:

// This does not apply to the NATS Go Client
打开/关闭Verbose模式

客户端可以从NATS服务器请求详细模式。当客户机请求时,服务器将用+OK或ERR or-ERR回复来自该客户机的每条消息。但是,客户端不会阻塞并等待响应。错误也将在没有详细模式的情况下发送,客户端库将按文档处理这些错误。
此功能仅用于调试客户端库或nats服务器本身。默认情况下,服务器将其设置为打开,但每个客户端都将其关闭。
要打开详细模式:

opts := nats.GetDefaultOptions()
opts.Url = "demo.nats.io"
// Turn on Verbose
opts.Verbose = true
nc, err := opts.Connect()
if err != nil {log.Fatal(err)
}
defer nc.Close()// Do something with the connection

NATS中文开发文档:连接相关推荐

  1. android 中文开发文档

    android 中文开发文档 ,请点击一下连接,学习官方开发文档 https://developer.android.google.cn/training/basics/firstapp

  2. nginx-php类似nginx-lua的扩展,nginx-php中文开发文档

    2020年6月2日10:19:03 github:https://github.com/rryqszq4/ngx_php7 php5的版本 https://github.com/rryqszq4/ng ...

  3. python3.8.1中文开发文档

    ​​​​​ 内置类型 以下部分描述了解释器中内置的标准类型. 主要内置类型有数字.序列.映射.类.实例和异常. 有些多项集类是可变的. 它们用于添加.移除或重排其成员的方法将原地执行,并不返回特定的项 ...

  4. python-docx中文开发文档_使用Python语言-docx生成Word文档

    本文主要向大家介绍了使用Python语言-docx生成Word文档,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. < 学会来使用python操作数据表和PDF,今天我们尝试 ...

  5. python中文开发文档_pydoc (Development Tools) – Python 中文开发手册

    Python 中文开发手册 pydoc (Development Tools) - Python 中文开发手册 2.1版本中的新功能. 源代码: Lib / pydoc.py pydoc模块自动从Py ...

  6. python图形绘制库turtle中文开发文档及示例大全【最详细、连结果图都有,gif格式的!】

    前言 本文参考:Python库官方文档 本文例子摘抄自Python库官方文档,为了方便讲解,个人进行了修改,并且相关函数说明不完全参照文档,在结果处贴出了执行结果,不方便用jpg等图片作为展示的用了g ...

  7. Android的swift语言Kotlin中文开发文档

    转自GitHub https://github.com/huanglizhuo/kotlin-in-chinese?utm_source=tuicool&utm_medium=referral ...

  8. itext7中文开发文档(三)

    ready to translate : https://developers.itextpdf.com/content/itext-7-jump-start-tutorial/chapter-3-u ...

  9. Z-Stack Home Developer's Guide—6. Clusters, Commands and Attributes中文翻译【Z-Stack Home 1.2.0的开发文档】

    这篇文章将翻译Z-Stack Home Developer's Guide开发文档中的6. Clusters, Commands and Attributes部分,在Z-Stack中Cluster.C ...

最新文章

  1. MATLAB实现直方图均衡化与规定化
  2. 关于WebBrowser.DocumentCompleted事件
  3. window 快捷键使用 + idear 编辑器使用
  4. goland 方法注释_goland 设置注释模板的过程图文详解
  5. js self = this的解释
  6. matlab读取图片亮度,Matlab中使用imagesc函数显示的亮度图像怎么和原图像的大小不一样?...
  7. 树的表示(1)--双亲表示法
  8. PHP7.1 狐教程
  9. 20141124-1
  10. linux环境编程apue和unp,《APUE》和《UNP》文件的编译和使用(转载)
  11. YOLOv3的环境配置
  12. java节假日算法_java节假日
  13. 微云同步盘 linux,微云同步盘和微云有什么区别?
  14. spark.reducer.maxReqsInFlight和spark.reducer.maxBlocksInFlightPerAddress
  15. 鸿蒙系统的理解,我所理解的鸿蒙系统
  16. 关于在袁教授blog中的”呛袁教授“的争论
  17. 《基础水文数据库》应用软件-水文预报中PA值计算
  18. 假设你有8个球,其中一个略微重一些,但是找出这个球的唯一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
  19. Byval 和 Byref的区别
  20. ubuntu启动报错kernel panic

热门文章

  1. 手机充值业务python_小伙利用Python爆破某会员网站,充会员?不存在的!
  2. 惠海半导体H7230直接替换BP1371 BP1361方案设计
  3. 折腾家里的龟速网络有感
  4. 三维模型下构件关联类型系统展示
  5. POSCMS 短信设置
  6. java后端生成图形验证码、前端接收并展示
  7. 自旋电子器件 —— 概念
  8. 如果说这个世界不是真实存在的,只是一段代码,迄今为止你发现了哪些bug?
  9. mysql in 子查询无法使用索引全表扫描 慎用in
  10. 怎么建一个网站?新手建站教程