nsq多播分发和负载均衡实验
nsq多播分发和负载均衡实验
实验nsq多播分发
1.在第一个shell中,启动nsqlookupd
1 | nsqlookupd |
2.在第二个shell中,启动nsqd
1 | nsqd --lookupd-tcp-address=127.0.0.1:4160 |
3.在第三个shell中,启动nsqadmin
1 | nsqadmin --lookupd-http-address=127.0.0.1:4161 |
4.在第四个shell中,发布第一个消息(同时创建topic)
1 | curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test' |
注意:在这一步中,可以指定channel的值,但是消息依然会发送给所有订阅topic的消费者。
5.在第五个shell中,使用nsq_to_file启动一个client来接收消息(消息存储目录为/tmp/nsq1)
1 | 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)
1 | 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)
1 | 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' |
9.验证数据
1 | cd /tmp |
转到/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
1 | nsqlookupd |
2.在第二个shell中,启动nsqd
1 | nsqd --lookupd-tcp-address=127.0.0.1:4160 |
3.在第三个shell中,启动nsqadmin
1 | nsqadmin --lookupd-http-address=127.0.0.1:4161 |
4.在第四个shell中,发布第一个消息(同时创建topic)
1 | 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)
1 | 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)
1 | 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)
1 | 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' |
9.验证数据
可以看到,/happy/nsqPop1、/happy/nsqPop2、/happy/nsqPop3三个http请求的接口接收到的消息总数,就是第8步中发送的消息总数,并且每个接口都是接收到两条消息。