2019独角兽企业重金招聘Python工程师标准>>>
不知道ZeroMQ是什么,自行baidu
zmq网上宣传很牛B,史上最快消息队列,是不是最快我不知道,但其过度封装,让它在很多场合失去了可用性
下面我将一一列举zmq自认为强大的优点
优点1:zmq将所有连接整合到一个context对象中,客户处理成千上万个连接时,只需要创建1个对象,不再需要维护大量的socket对象。
好棒,但是请告诉我
1.如何判断消息来至于哪个连接
2.如何操作某个特定的连接,比如断开某个连接,从特定连接接收消息
优点2:zmq将分布式网络总结为4大模型,比如REQ/REP模型,zmq帮你解决了业务的序列化问题,你只要选择创建对应模型的socket就可以保证先请求的,先回应
虽然业务的序列化,对程序员来说只是轻而易举的个小事情,不过我还是要夸奖你为用户考虑的真周到,
但是请告诉我
1.如何让不同连接(业务)并发请求,因为我绝对不会在不同连接上进行序列化操作,如果业务要求两个连接需要序列化,我一定会把它们合并成1个连接,不要给我一棵树,却要求我放弃一片森林啊。
优点3:zmq封状了连接重连机制,用户不再关心网络异常,只要对端异常恢复了,zmq就保证连接是可用的。
但是请告诉我
1.如何知道连接状态,以适时退出无效连接上的recv等待2.pub/sub模式下,如果对端崩溃,如何知道什么时候恢复连接,以确保publish消息到达,当然我知道设置ID可以,但是发送缓冲会满,如果对端一直不重启,内存和硬盘会被吃光
3.Req/Rep模式下,如果rep端recv后崩溃,req端如何解除send缩定
zmq诸多弊端的罪魁祸首,总结为一句话就是:将多状态整合成了一状态