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

 

posted @ 2023-08-13 10:22  美好生活我心往之  阅读(82)  评论(0编辑  收藏  举报