官网: https://nsq.io/
NSQ是一个基于Go语言的分布式实时消息平台,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。
NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。
nsqd:是接收、队列和传送消息到客户端的守护进程。
nsqlookupd:是管理的拓扑信息,并提供了最终一致发现服务的守护进程。
nsqadmin:是一个 Web UI 来实时监控集群(和执行各种管理任务)。
先决条件
编译
NSQ 使用 go 模块来生成可靠的构建。
git clone https://github.com/nsqio/nsq
cd nsq
make
make install
测试
./test.sh
NSQ集群比较简单,主要包含4个部分,一是生产者、二是nsq实例(nsqd)、三是服务发现nsqlookupd、四是消费者(Comsumer)。
这4个部分的工作方式如下:
两台机器做集群,机器信息
10.0.0.5
10.0.0.6
nohup ./nsqlookupd &
10.0.0.5机器执行
nohup ./nsqd --broadcast-address=10.0.0.5:4160 --lookupd-tcp-address=10.0.0.6:4160 &
10.0.0.6机器执行
nohup ./nsqd --broadcast-address=10.0.0.6:4160 --lookupd-tcp-address=10.0.0.5:4160 &
注意:要指定两个nsqlookupd的http地址
nohup ./nsqadmin --lookupd-http-address=10.0.0.5:4160 --lookupd-http-address=10.0.0.6:4160 &
#!/bin/bash
command_exists() {
command -v "$1" &>/dev/null
}
# 检查是否安装了go
if ! command_exists go; then
# 如果未安装go,执行安装操作
wget https://mirrors.aliyun.com/golang/go1.21rc4.linux-amd64.tar.gz
tar -C /usr/local -zxvf go1.21rc4.linux-amd64.tar.gz
echo "export GOROOT=/usr/local/go" >> /etc/profile
echo "export PATH=\$PATH:\$GOROOT/bin" >> /etc/profile
source /etc/profile # 刷新环境变量
go env -w GOPROXY="https://goproxy.cn"
go env -w GO111MODULE=on
fi
# 检查是否已安装nsq
if ! command_exists nsqd; then
# 如果未安装nsq,执行安装操作
cd ~/ && git clone https://github.com/nsqio/nsq
cd nsq && make && make install
fi
# 启动 nsqlookupd
if ! pgrep -x "nsqlookupd" > /dev/null; then
echo "nsqlookupd 未运行,正在启动..."
nohup nsqlookupd > /dev/null 2>&1 &
else
echo "nsqlookupd 已经在运行"
fi
# 启动 nsqd,注意哪台机器运行broadcast-address修改为哪台机器的ip
if ! pgrep -x "nsqd" > /dev/null; then
echo "nsqd 未运行,正在启动..."
/usr/local/bin/nsqd --broadcast-address=10.0.0.5:4160 --lookupd-tcp-address=10.0.0.6:4160 --data-path=/data/nsq/ > ~/log/nsqd1.log 2>&1 &
else
echo "nsqd 已经在运行"
fi
# 启动 nsqadmin,注意哪台机器运行broadcast-address修改为哪台机器的ip
if ! pgrep -x "nsqadmin" > /dev/null; then
echo "nsqadmin 未运行,正在启动..."
/usr/local/bin/nsqadmin --broadcast-address=10.0.0.5:4160 --lookupd-tcp-address=10.0.0.6:4160 > ~/log/nsqadmin.log 2>&1 &
else
echo "nsqadmin 已经在运行"
fi