什么是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中,发布几条消息

  1.  
    $ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'
  2.  
    $ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'
  3.  
    $ curl -d 'hello world 4' 'http://127.0.0.1:4151/pub?topic=test'

9.验证数据

  1.  
    $ cd /tmp
  2.  
    $ ls nsq*/
  3.  
    $ 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中,发布几条消息

  1.  
    $ curl -d 'topic=test&cmd=action1' 'http://127.0.0.1:4151/pub?topic=test'
  2.  
    $ curl -d 'topic=test&cmd=action2' 'http://127.0.0.1:4151/pub?topic=test'
  3.  
    $ curl -d 'topic=test&cmd=action3' 'http://127.0.0.1:4151/pub?topic=test'
  4.  
    $ curl -d 'topic=test&cmd=action1' 'http://127.0.0.1:4151/pub?topic=test'
  5.  
    $ curl -d 'topic=test&cmd=action2' 'http://127.0.0.1:4151/pub?topic=test'
  6.  
    $ 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多播分发和负载均衡实验的更多相关文章

  1. nginx负载均衡实验

    Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...

  2. 11.2,nginx负载均衡实验

    Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...

  3. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  4. Nginx代理和负载均衡实验

    一.构建两个tomcat容器并启动 [root@localhost bin]# ps -ef|grep tomcat root : pts/ :: /usr/bin/java -Djava.util. ...

  5. nginx+tomcat负载均衡实验

    导言: 本次实验,tomcat就直接使用录原生的主页,只是简单修改主页识别主机,nginx也是直接在欢迎页上面修改的,直接实现负载均衡. 主机1:192.168.100.156 nginx+tomca ...

  6. 2506-nginx的配置-域名分发与负载均衡(只有配置无原理)

    nginx的安装 Windows7:官网下载,是一个压缩包,运行解压缩后的exe文件即启动了nginx,需注意的是,Windows(win7)的80端口默认被微软的IIS占用,需改成别的端口,例如80 ...

  7. LVS+Keepalived高可用负载均衡集群架构实验-01

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

  8. 开源负载均衡通讯分发器(LB dispatcher) - G5

    from:http://bbs.csdn.net/topics/390753043 1.开发背景今天和系统运维的老大聊天,谈到一直在用的F5,行里对其评价为价格过高.功能复杂难懂,反正印象不是很好,使 ...

  9. nginx 和 IIS 实现负载均衡

    Nginx的作用和优点,这里不必多说,今天主要是nginx负载均衡实验,把做的步骤记录下来,作为一个学习笔记吧,也可以给大家做下参考. 1.Nginx安装 1.下载地址:http://nginx.or ...

随机推荐

  1. hive学习(四) hive的函数

    1.内置运算符 1.1关系运算符 运算符 类型 说明 A = B 所有原始类型 如果A与B相等,返回TRUE,否则返回FALSE A == B 无 失败,因为无效的语法. SQL使用”=”,不使用”= ...

  2. 04 java 基础:数据类型

    java 数据类型:基本类型与引用类型 基本类型:数值型,其中数值型分为整型.浮点型,整型包括 byte.short .int.long ,默认为 int 类型.浮点类型分为单精度.双精度,分为 fl ...

  3. vue框架muse-ui官网文档主题错误毕竟【01】

    在使用了element-ui后,总觉得不尽兴,再学一个响应式的muse-ui发现是个小众框架,但是我很喜欢. 指出官网文档里的主题使用描述错误. 首先,在vue-cli里安装raw-loader:np ...

  4. Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题

    http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...

  5. HDU 1231.最大连续子序列-dp+位置标记

    最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  6. 【转载】Picasso源码解析

    原文地址:http://blog.csdn.net/u012702547/article/details/52273918 Picasso是Squareup公司出的一款图片加载框架,能够解决我们在An ...

  7. 【BZOJ 2440】 2440: [中山市选2011]完全平方数 (二分+容斥原理+莫比乌斯函数)

    2440: [中山市选2011]完全平方数 Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数 ...

  8. 「ZJOI2018」历史

    「ZJOI2018」历史 前置知识 \(\text{LCT}\) 维护子树信息,考虑辅助树上一个节点的子树信息只是其代表的这一段链的信息,设 \(S(u)\) 为节点 \(u\) 的子树信息,那么在辅 ...

  9. [BZOJ5334][TJOI2018]数学计算(exgcd/线段树)

    模意义下除法若结果仍为整数的话,可以记录模数的所有质因子,计算这些质因子的次幂数,剩余的exgcd解决. $O(n\log n)$但有9的常数(1e9内的数最多有9个不同的质因子),T了. #incl ...

  10. [BZOJ4554][TJOI2016&&HEOI2016]游戏(匈牙利)

    4554: [Tjoi2016&Heoi2016]游戏 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 857  Solved: 506[Sub ...