zeromq相关

举报
Amrf 发表于 2020/07/20 15:57:09 2020/07/20
【摘要】 zeromq4 git地址

编译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类型包括如下:

image.png有效的连接组合image.png

官方文档:http://zguide.zeromq.org/page:allhttps://github.com/booksbyus/zguide

1.最简单的请求响应结构:

image.png=>image.png=>image.png=>image.png=>image.png=>image.png=>

image.png=>image.png

2. 发布者订阅者结构:

image.png=》image.png=>image.png

3.并行管线结构:

image.png=>image.png

4.公平队列

image.png

5.同步

image.png=》image.png

6.关于消息丢失

image.png

值得注意的是第四五章关于高可用性的一些结构设计;

/===========================================================/

参考:

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

http://webcache.googleusercontent.com/search?q=cache:pOX0rghQISIJ:zguide.zeromq.org/go:asyncsrv+&cd=2&hl=zh-CN&ct=clnk&gl=sg

https://stackoverflow.com/questions/61567146/using-zeromq-golang-within-fargate

https://github.com/pebbe/zmq4/blob/master/examples/hwserver.go

http://webcache.googleusercontent.com/search?q=cache:J-q1jaKxmQ8J:zguide.zeromq.org/go:hwserver+&cd=1&hl=zh-CN&ct=clnk&gl=sg

https://www.cnblogs.com/thingk/p/4274711.html

https://www.google.com/search?source=hp&ei=X64OX9HkHcqNoASu2bjYDg&q=pkg-config.exe+%E5%90%AF%E5%8A%A8%E6%8A%A5%E9%94%99&oq=pkg-config.exe+%E5%90%AF%E5%8A%A8%E6%8A%A5%E9%94%99&gs_lcp=CgZwc3ktYWIQAzoCCAA6BQgAEM0COgQIABAeOgUIIRCgAToHCCEQChCgAVCyAVi6UGCpU2gHcAB4AIABgwGIAZgRkgEEMTQuOJgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwiRkOKh3M7qAhXKBogKHa4sDusQ4dUDCAc&uact=5

https://webcache.googleusercontent.com/search?q=cache:R9quKFC7WeoJ:https://www.it-swarm.dev/zh/windows/%25E5%25A6%2582%25E4%25BD%2595%25E5%259C%25A8windows%25E4%25B8%25AD%25E5%25AE%2589%25E8%25A3%2585pkg%25E9%2585%258D%25E7%25BD%25AE%25EF%25BC%259F/968921570/+&cd=5&hl=zh-CN&ct=clnk&gl=sg

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://stackoverflow.com/questions/43987457/zeromq-what-is-a-difference-between-zmq-recv-v-s-zmq-msg-recv-calls

https://opensource.com/article/20/3/zeromq-c-python

https://stackoverflow.com/questions/41700291/why-is-zeromq-pub-enqueing-messages-with-no-connected-subscribers-well-disc

https://github.com/zeromq/netmq/issues/679  Subscribe or Unsubscribe while receiving

https://stackoverflow.com/questions/16608580/publisher-finishes-before-subscriber-and-messages-are-lost-why

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/16228484/zeromq-c-is-it-necessary-to-set-a-high-water-mark-for-subscribers

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

https://www.aleksandrhovhannisyan.com/blog/dev/finite-state-machine-fsm-tutorial-implementing-an-fsm-in-c/

其他常见的消息队列:

    ActiveMQ、RabbitMQ、Kafka、MetaMQ、RocketMQ、Apollo



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。