zeromq相关
编译zeromq4
首先使用vs编译zeromq4-x,我这里使用的是vs2015,目前这个版本已经不存在以前的帖子里说的路径问题了,可以正常编译;
编译完成之后可以在bin/win32目录下看到libzmq_d.dll,lib/win32目录下看到libzmq_d.lib;
写一个测试程序:
#include <iostream> #include "zmq.h" #pragma comment(lib, "libzmq_d.lib") int main() { int a, b, c; zmq_version(&a, &b, &c); std::cout << "zmq-version:" << a << "-" << b << "-" << c <<std::endl; return 0; }
编译:
cl /ID:\dev\zeromq4-x-master\include test.cpp /link /LIBPATH:D:\dev\zeromq4-x-master\lib\Win32
运行:
可以参考:https://dirtysalt.github.io/html/zeromq.html进一步的编写测试程序,
需要注意的是第一个例子中,有些api的形式发生了变化,所以需要做一些修改,例如例子中的zmq_send/zmq_recv需要修改为zmq_msg_send/zmq_msg_recv;
其中的zhelpers.h可以使用https://github.com/booksbyus/zguide/blob/master/examples/C/zhelpers.h,
当做到Publish-Subscribe这个测试的时候,发现先启动的sub始终得不到消息;一度以为是不是版本问题,(https://github.com/zeromq/clrzmq4/issues/141)
切换到https://github.com/zeromq/zeromq4-1/https://github.com/jedisct1/libsodium后问题依旧存在,
然后发现在publisher消息循环之前增加50ms的延时后,sub可以正常接收到,去掉开始的50ms延时,转而把循环中的延时改为50ms,则可以看到先启动的sub丢失了部分消息;这样看原帖中所谓的丢失掉了一条消息就好理解了。没有看sub的具体实现,但可以想象的是sub有一个检测连接的周期存在,如果pub在这个检测周期到来之前就结束了,那么sub就什么消息都不会收到;
/===========================================================/
为了能够比较方便的看懂zeromq的一些网络拓扑,需要了解zeromq的socket类型包括如下:
有效的连接组合
官方文档:http://zguide.zeromq.org/page:all(https://github.com/booksbyus/zguide)
1.最简单的请求响应结构:
=>=>=>=>=>=>
=>
2. 发布者订阅者结构:
=》=>
3.并行管线结构:
=>
4.公平队列
5.同步
=》
6.关于消息丢失
值得注意的是第四五章关于高可用性的一些结构设计;
/===========================================================/
参考:
zeromq4 git地址:
https://github.com/zeromq/zeromq4-x
vs2015编译zeroMQ和应用:
https://blog.csdn.net/u012442719/article/details/56281670
openresty环境中的zeromq:
https://github.com/FRiCKLE/ngx_zeromq
https://github.com/aifeiasdf/lua-resty-zeromq
golang环境下的zeromq:
https://www.cnblogs.com/wjx0912/p/6124390.html
https://dirtysalt.github.io/html/zeromq.html
https://stackoverflow.com/questions/61567146/using-zeromq-golang-within-fargate
https://github.com/pebbe/zmq4/blob/master/examples/hwserver.go
https://www.cnblogs.com/thingk/p/4274711.html
http://mirror.yandex.ru/mirrors/ftp.gnome.org/binaries/win64/dependencies/
https://stackoverflow.com/questions/25897838/zmq-pub-sub-should-it-be-dropping-messages
https://opensource.com/article/20/3/zeromq-c-python
https://github.com/zeromq/netmq/issues/679 Subscribe or Unsubscribe while receiving
https://stackoverflow.com/questions/30572183/buffering-messages-for-dead-subscriber-with-zeromq
https://stackoverflow.com/questions/42948798/understanding-zmqs-hwm
https://www.cnblogs.com/kohlrabi/p/7306587.html ZeroMQ高水位标记(high-water mark,HWM)
https://github.com/zeromq/libzmq/issues/1373 zmq_socket options ZMQ_RCVHWM, ZMQ_SNDHWM ignored
https://stackoverflow.com/questions/53356451/pyzmq-high-water-mark-not-working-on-pub-socket
https://stackoverflow.com/questions/54979404/zmq-c-topics-for-publish-subscribe
https://stackoverflow.com/questions/13287378/same-zmq-identity-for-multiple-subcribers
https://wizardforcel.gitbooks.io/zmq-guide/chapter2.html ---官方教程的中文翻译版本
http://suntus.github.io/2015/03/02/zmq%E4%B8%AD%E6%96%87%E6%8C%87%E5%8D%97-5/
https://stackoverflow.com/questions/27479504/how-to-reconnect-the-dealer-in-zeromq
https://stackoverflow.com/questions/36578003/auto-reconnect-in-zmq-subscriber
https://stackoverflow.com/questions/16157518/reconnecting-to-zmq-feed-after-disconnect
https://www.codeproject.com/Articles/1087619/State-Machine-Design-in-Cplusplus-2
其他常见的消息队列:
ActiveMQ、RabbitMQ、Kafka、MetaMQ、RocketMQ、Apollo
- 点赞
- 收藏
- 关注作者
评论(0)