[TOC]
> NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异
## 安装NSQ服务端
### 下载地址
> https://nsq.io/deployment/installing.html 下载linux最新稳定版
### 启动nsqlookupd
> 主要负责服务发现 负责nsqd的心跳、状态监测,给客户端、nsqadmin提供nsqd地址与状态
~~~
./nsqlookupd
~~~
### 启动nsqd
> 负责接收消息,存储队列和将消息发送给客户端
~~~
./nsqd --lookupd-tcp-address=127.0.0.1:4160
~~~
### 启动nqsadmin
> nsqadmin是一个web管理界面,访问地址 http://localhost:4171/
~~~
./nsqadmin --lookupd-http-address=127.0.0.1:4161
~~~
## 生产者 (nsq-send.go)
~~~
package main
import (
"github.com/nsqio/go-nsq"
"fmt"
"strconv"
)
var (
//nsqd的地址,使用了tcp监听的端口
tcpNsqdAddrr = "127.0.0.1:4150"
)
func main() {
//初始化配置
config := nsq.NewConfig()
for i := 0; i < 100; i++ {
//创建100个生产者
tPro, err := nsq.NewProducer(tcpNsqdAddrr, config)
if err != nil {
fmt.Println(err)
}
//主题
topic := "topic_demo"
//主题内容
tCommand := "new data!" + strconv.Itoa(i)
//发布消息
err = tPro.Publish(topic, []byte(tCommand))
if err != nil {
fmt.Println(err)
}
}
}
~~~
## 消费者 (nsq-receive.go)
> 测试服务器上可执行`go run nsq-receive.go`进行测试
> 正式服务器上,需先进行打包`go build nsq-receive.go`后,再使用`nohup ./nsq-receive &`或者`supervisor`进行运行
~~~
package main
import (
"fmt"
"time"
"github.com/nsqio/go-nsq"
)
// 消费者
type ConsumerT struct{}
// 主函数
func main() {
InitConsumer("topic_demo", "test-channel", "127.0.0.1:4161")
for {
time.Sleep(time.Second * 10)
}
}
//处理消息
func (*ConsumerT) HandleMessage(msg *nsq.Message) error {
fmt.Println("receive", msg.NSQDAddress, "message:", string(msg.Body))
return nil
}
//初始化消费者
func InitConsumer(topic string, channel string, address string) {
cfg := nsq.NewConfig()
cfg.LookupdPollInterval = time.Second //设置重连时间
c, err := nsq.NewConsumer(topic, channel, cfg) // 新建一个消费者
if err != nil {
panic(err)
}
c.SetLogger(nil, 0) //屏蔽系统日志
c.AddHandler(&ConsumerT{}) // 添加消费者接口
//建立NSQLookupd连接
if err := c.ConnectToNSQLookupd(address); err != nil {
panic(err)
}
}
~~~
- 基础知识
- 开发环境
- 包名规则
- 包初始化 (init)
- 基础数据类型
- 基础类型转换
- 格式化输出
- go指针
- 流程控制语句
- 函数定义
- 匿名函数
- 数组和切片
- map集合
- 结构体
- Interface接口
- 日期处理
- 数学计算
- 正则表达式
- 协程 (并发处理)
- channel
- waitgroup
- mutex (锁机制)
- websocket
- protobuf
- Redis
- 错误处理
- 打包程序
- NSQ消息队列
- 单元测试
- beego
- 安装入门
- Gin
- 快速入门
- 路由与控制器
- 处理请求参数
- 表单验证
- 处理响应结果
- 渲染HTML模版
- 访问静态文件
- Gin中间件
- Cookie处理
- Session处理
- Gin上传文件
- swagger
- pprof性能测试
- GORM
- 入门教程
- 模型定义
- 数据库连接
- 插入数据
- 查询数据
- 更新数据
- 删除数据
- 事务处理
- 关联查询
- 属于 (BELONG TO)
- 一对一 (Has One)
- 一对多 (Has Many)
- 多对多 (Many to Many)
- 预加载 (Preloading)
- 错误处理
- 第三方常用插件
- viper 读取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷键