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示例
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示例
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是一个强大的实时消息传递平台,适用于构建高可用、分布式的应用程序。