nsq多播分发和负载均衡实验
什么是nsq?请参考实时分布式消息平台nsq。
本地如何搭建nsq?请参考本地搭建nsq经验分享。
从NSQ的设计文档中得知,单个nsqd被设计为一次能够处理多个流数据,NSQ中的数据流模型是由stream和consumer组成。Topic是一种独特的stream,Channel是一个订阅了给定Topic的consumer逻辑分组。NSQ的数据流模型结构如下图所示:
从上图可以看出,单个nsqd可以有多个Topic,每个Topic又可以有多个Channel。Channel能够接收Topic所有消息的副本,从而实现了多播分发;而Channel上的每个消息被分发给它的一个订阅者,从而实现负载均衡。所有这些东西,就组成了一个可以表示各种简单和复杂拓扑结构的强大框架。下面对nsq的多播分发和负载均衡进行实验。
一、实验nsq多播分发
1.在第一个shell中,启动nsqlookupd
$ nsqlookupd
2.在第二个shell中,启动nsqd
$ nsqd --lookupd-tcp-address=127.0.0.1:4160
3.在第三个shell中,启动nsqadmin
$ nsqadmin --lookupd-http-address=127.0.0.1:4161
4.在第四个shell中,发布第一个消息(同时创建topic)
$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
注意:在这一步中,可以指定channel的值,但是消息依然会发送给所有订阅topic的消费者。
5.在第五个shell中,使用nsq_to_file启动一个client来接收消息(消息存储目录为/tmp/nsq1)
$ nsq_to_file --topic=test --channel=ch_test1 --output-dir=/tmp/nsq1 --lookupd-http-address=127.0.0.1:4161
6.在第六个shell中,使用nsq_to_file启动一个client来接收消息(消息存储目录为/tmp/nsq2)
$ nsq_to_file --topic=test --channel=ch_test2 --output-dir=/tmp/nsq2 --lookupd-http-address=127.0.0.1:4161
7.在第七个shell中,使用nsq_to_file启动一个client来接收消息(消息存储目录为/tmp/nsq2)
$ nsq_to_file --topic=test --channel=ch_test3 --output-dir=/tmp/nsq3 --lookupd-http-address=127.0.0.1:4161
8.在第四个shell中,发布几条消息
- $ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'hello world 4' 'http://127.0.0.1:4151/pub?topic=test'
9.验证数据
- $ cd /tmp
- $ ls nsq*/
- $ cat nsq*/*
转到/tmp/nsq1目录下,查看符合test.*.log模式的文件,发现其中已经有三条消息,分别为“hello world 2”、“hello world 3”、“hello world 4”。查看/tmp/nsq2和/tmp/nsq3目录下符合test.*.log模式的文件,亦是如此。但是,这些log文件中并没有“hello world 1”,因为消息“hello world1”是在启动client之前发送的,所以没有被client接收到。
二、实验nsq负载均衡
1.在第一个shell中,启动nsqlookupd
$ nsqlookupd
2.在第二个shell中,启动nsqd
$ nsqd --lookupd-tcp-address=127.0.0.1:4160
3.在第三个shell中,启动nsqadmin
$ nsqadmin --lookupd-http-address=127.0.0.1:4161
4.在第四个shell中,发布第一个消息(同时创建topic)
$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
注意:在这一步中,可以指定channel的值,但是消息依然会发送给所有订阅topic的消费者。
5.在第五个shell中,使用nsq_to_http启动一个client来接收消息(http接口的uri为/happy/nsqPop1)
$ nsq_to_http --topic=test --channel=ch_test --lookupd-http-address=127.0.0.1:4161 --post=http://local.nsq.cn:8080/happy/nsqPop1 --content-type=application/x-www-form-urlencoded
6. 在第六个shell中,使用nsq_to_http启动一个client来接收消息(http接口的uri为/happy/nsqPop2)
$ nsq_to_http --topic=test --channel=ch_test --lookupd-http-address=127.0.0.1:4161 --post=http://local.nsq.cn:8080/happy/nsqPop2 --content-type=application/x-www-form-urlencoded
7. 在第七个shell中,使用nsq_to_http启动一个client来接收消息(http接口的uri为/happy/nsqPop3)
$ nsq_to_http --topic=test --channel=ch_test --lookupd-http-address=127.0.0.1:4161 --post=http://local.nsq.cn:8080/happy/nsqPop3 --content-type=application/x-www-form-urlencoded
注意:/happy/nsqPop1、/happy/nsqPop2、/happy/nsqPop3三个http请求的接口执行的动作不能一样,否则无法区分哪个接口具体接收了消息,执行了指定动作。
8. 在第四个shell中,发布几条消息
- $ curl -d 'topic=test&cmd=action1' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'topic=test&cmd=action2' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'topic=test&cmd=action3' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'topic=test&cmd=action1' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'topic=test&cmd=action2' 'http://127.0.0.1:4151/pub?topic=test'
- $ curl -d 'topic=test&cmd=action3' 'http://127.0.0.1:4151/pub?topic=test'
9.验证数据
可以看到,/happy/nsqPop1、/happy/nsqPop2、/happy/nsqPop3三个http请求的接口接收到的消息总数,就是第8步中发送的消息总数,并且每个接口都是接收到两条消息。
至此,验证完毕,实验结果符合理论预期。
nsq多播分发和负载均衡实验的更多相关文章
- nginx负载均衡实验
Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...
- 11.2,nginx负载均衡实验
Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- Nginx代理和负载均衡实验
一.构建两个tomcat容器并启动 [root@localhost bin]# ps -ef|grep tomcat root : pts/ :: /usr/bin/java -Djava.util. ...
- nginx+tomcat负载均衡实验
导言: 本次实验,tomcat就直接使用录原生的主页,只是简单修改主页识别主机,nginx也是直接在欢迎页上面修改的,直接实现负载均衡. 主机1:192.168.100.156 nginx+tomca ...
- 2506-nginx的配置-域名分发与负载均衡(只有配置无原理)
nginx的安装 Windows7:官网下载,是一个压缩包,运行解压缩后的exe文件即启动了nginx,需注意的是,Windows(win7)的80端口默认被微软的IIS占用,需改成别的端口,例如80 ...
- LVS+Keepalived高可用负载均衡集群架构实验-01
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- 开源负载均衡通讯分发器(LB dispatcher) - G5
from:http://bbs.csdn.net/topics/390753043 1.开发背景今天和系统运维的老大聊天,谈到一直在用的F5,行里对其评价为价格过高.功能复杂难懂,反正印象不是很好,使 ...
- nginx 和 IIS 实现负载均衡
Nginx的作用和优点,这里不必多说,今天主要是nginx负载均衡实验,把做的步骤记录下来,作为一个学习笔记吧,也可以给大家做下参考. 1.Nginx安装 1.下载地址:http://nginx.or ...
随机推荐
- Eolinker----全局变量的不同场景使用
因为目前eolinker的API自动化测试不支持“构造参数”,因此针对“全局变量”的使用在不同的场景下,可采用不同的方式实现,但是一个参数既然设计成为了全局变量,那么在接口中使用时尽量保证书写风格一致 ...
- logstash收集java日志,多行合并成一行
使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并. 1.java日志收集测试 input { ...
- tornado中的cookie
1. cookie与session的区别: Session:通过在服务器端记录用户信息从而来确认用户身份,保存在服务器上,每个用户会话都有一个对应的session Cookie:通过在客户端记录信息确 ...
- poj3414 Pots(BFS)
题目链接 http://poj.org/problem?id=3414 题意 有两个杯子,容量分别为A升,B升,可以向杯子里倒满水,将杯子里的水倒空,将一个杯子里的水倒到另一个杯子里,求怎样倒才能使其 ...
- nodejs pm2配置使用教程
pm2是非常优秀工具,它提供对基于node.js的项目运行托管服务.它基于命令行界面,提供很多特性: 内置的负载均衡器等等,下面我们就一起来看看吧. 一.简介 pm2是一个带有负载均衡功能的应用进程管 ...
- vue表格导入
<input id="upload" type="file" @change="importfxx(this)" accept=&q ...
- elementUI 学习入门之 Button 按钮
基础按钮用法 按钮分为:默认按钮.朴素按钮(plain).圆角按钮(round).圆形按钮(circle).eg: <el-button plain>朴素按钮</el-button& ...
- 【BZOJ 4568】 4568: [Scoi2016]幸运数字 (线性基+树链剖分+线段树)
4568: [Scoi2016]幸运数字 Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个 幸运数字,以纪念碑的形 ...
- 表白 代码 韩梦飞沙-画心.html
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 韩梦飞沙-画心.html <!DOCTYPE html> <html& ...
- POJ1741 Tree 树分治模板
http://poj.org/problem?id=1741 题意:一棵n个点的树,每条边有距离v,求该树中距离小于等于k的点的对数. dis[y]表示点y到根x的距离,v代表根到子树根的距离 ...