# nats消息队列学习笔记

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/21153.html | 发布：2023-06-09 | 更新：2023-06-09 | 分类：云虚拟主机、建站教程

nats 简介和使用

 

nats 有 3 个产品

 

core-nats: 不做持久化的及时信息传输系统  
 nats-streaming: 基于 nats 的持久化消息队列(已弃用)  
 nats-jetstream: 基于 nats 的持久化消息队列

 

这里主要讨论 core-nats 和 nats-jetstream

 

### nats 快速开始

 
 
- 启动 nats 
- # 启动 nats  
docker run --network host -p 4222:4222 nats 
- Connect 连接 
- nc, err := nats.Connect("nats://localhost:4222")  
if err != nil {  
 log.Fatal("NATS 连接失败")  
}  
defer nc.Close() 
- Publish 发布/生产消息 
- // 生产消息  
err := nc.Publish("foo", []byte("Hello World"))  
if err != nil {  
 log.Fatal("NATS 发布失败")  
}  
// Flush 发布缓冲区  
err = nc.Flush()  
if err != nil {  
 log.Fatal("NATS Flush 失败")  
} 
- 出于性能考虑, 发布的消息先写入到类似 Buffer 缓存的地方, 然后再一次性发送到 nats 服务器

 
 
  - Subscribe 订阅/消费消息 
  - // 消费消息  
_, err = nc.Subscribe("foo", func(msg *nats.Msg) {  
 fmt.Printf("收到消息: %s\n", msg.Data)  
})  
if err != nil {  
 log.Fatal("NATS 订阅失败")  
// 消费消息  
// queue 是队列组的名称, 同一组队列最多只有一个接收者能成功接收  
_, _ = nc.QueueSubscribe("foo", "queue", func(msg *nats.Msg) {  
 fmt.Printf("收到消息: %s\n", string(msg.Data))  
}) 
  - 信息传递模式

 

NATS支持4种主要的通信模式。它们是

 

基于主题  
 发布-订阅  
 请求-回复/分散-收集  
 队列组

 

每一个都是不同的模式，都有其使用案例，有一些重叠。允许所有这四种模式给了NATS极大的灵活性和功能，以应对多个应用程序之间的各种不同情况，或一个大型单体。

 

基于主题的消息传递

 

A 主题在NATS中是一个简单的字符串，代表对数据的兴趣。它被分_层标记_以支持_通配符订阅_。

 

foo.* 匹配 _foo.bar_和 foo.baz  
 foo.*.bar匹配 _foo.a.bar_和 foo.b.bar  
 _foo.>_匹配上述任何一个  
 _>_匹配NATS中的所有内容

 

这种消息传递模式允许发布者使用一个_Subject_来共享数据，而消费者可以通过使用通配符来监听这些Subject来接收这些消息。

 

从某种意义上说，这种模式是基于观察者设计模式的，它通常有一个_主题_和_观察者_。

 

例如，如果有人向_'audit.us.east'_发送消息，那么所有监听该确切主题或通配符主题的订阅者都会收到这个消息。

 

} 
  -  
  -  
  -

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
