golang nsq学习
1. 什么是NSQ?
NSQ(Nanomsg Simple Queue)是一个实时消息传递平台,用于解耦分布式应用程序中的组件,它提供了可靠的消息传递和基于发布/订阅模式的消息分发。
2. NSQ的基本概念
在学习NSQ之前,有几个基本概念需要了解:
-
Topic(主题):Topic是消息的逻辑分类,类似于消息队列中的"队列"或"主题"概念。生产者将消息发布到特定的主题,而消费者订阅感兴趣的主题。
-
Channel(通道):Channel是对主题的订阅者的逻辑分组。一个主题可以有多个通道,通常用于实现消费者的负载均衡。消息将从主题复制到每个订阅的通道。
-
Producer(生产者):生产者负责将消息发布到特定的主题。多个生产者可以发布消息到同一个主题。
-
Consumer(消费者):消费者订阅一个主题的一个或多个通道,并处理收到的消息。
-
Message(消息):消息是NSQ中传递的基本单位,它包含要传递的数据以及相关的元数据
3. 安装与配置
NSQ的官网中找到适合你操作系统的安装方法:https://nsq.io/
4. Producer示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package main import ( "log" "github.com/nsqio/go-nsq" ) func main() { config := nsq.NewConfig() producer, err := nsq.NewProducer( "127.0.0.1:4150" , config) if err != nil { log.Fatal(err) } err = producer.Publish( "my_topic" , []byte( "Hello, NSQ!" )) if err != nil { log.Fatal(err) } producer.Stop() } |
5. Consumer示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package main import ( "log" "os" "os/signal" "syscall" "github.com/nsqio/go-nsq" ) func main() { config := nsq.NewConfig() consumer, err := nsq.NewConsumer( "my_topic" , "my_channel" , config) if err != nil { log.Fatal(err) } consumer.AddHandler(nsq.HandlerFunc( func (message *nsq.Message) error { log.Printf( "Received message: %s" , message.Body) return nil })) err = consumer.ConnectToNSQD( "127.0.0.1:4150" ) if err != nil { log.Fatal(err) } sigChan := make( chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) <-sigChan consumer.Stop() } |
6. 高级特性
NSQ还提供了许多高级特性,如分布式的主题和通道发现、延迟消息等。可参考官方文档:https://nsq.io/
7. 总结
NSQ是一个强大的实时消息传递平台,适用于构建高可用、分布式的应用程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步