zeromq

ZeroMQ模式

不打扰是莪最后的温柔 提交于 2020-02-17 17:37:28
文章目录 一、相关知识 二、基本套接字 1、REQ-REP模式 2、PUSH-PULL模式 3、PUB-SUB模式 4、DEALER-ROUTER模式 5、PAIR-PAIR模式 结语 一、相关知识 1、基础API接口 创建和销毁套接字:zmq_socket(), zmq_close() 配置和读取套接字选项:zmq_setsockopt(), zmq_getsockopt() 为套接字建立连接:zmq_bind(), zmq_connect() 发送和接收消息:zmq_send(), zmq_recv() 2、ZMQ与TCP的区别 使用多种协议, inproc(进程内) 、 ipc(进程间) 、 tcp 、 pgm(广播) 、 epgm ; 当客户端使用zmq_connect()时连接就已经建立了,并不要求该端点已有某个服务使用zmq_bind()进行了绑定; 连接是异步的,并由一组消息队列做缓冲; 连接会表现出某种消息模式,这是由创建连接的套接字类型决定的; 一个套接字可以有多个输入和输出连接; ZMQ没有提供类似zmq_accept()的函数,因为当套接字绑定至端点时它就自动开始接受连接了; 应用程序无法直接和这些连接打交道,因为它们是被封装在ZMQ底层的。 3、ZMQ核心消息模型 请求-应答模式:将一组服务端和一组客户端相连,用于远程过程调用或任务分发。 发布-订阅模式

windows安装ActiveMQ以及点对点以及发布订阅

♀尐吖头ヾ 提交于 2020-02-13 20:40:35
一、MQ产品的分类 1、RabbitMQ   是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。 2、Redis   是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。 入队 出队 128B 512B 1K 10K 128B 512B 1K 10K Redis 16088 15961 17094 25 15955 20449 18098 9355 RabbitMQ 10627

基于.NET平台常用的框架整理

拟墨画扇 提交于 2020-02-12 04:14:17
分布式缓存框架: Microsoft Velocity :微软自家分布式缓存服务框架。 Memcahed :一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度。 Redis :是一个高性能的KV数据库。 它的出现很大程度补偿了Memcached在某些方面的不足。 EnyimMemcached :访问Memcached最优秀的.NET客户端,集成不错的分布式均衡算法。 开源的.NET系统推荐: OXITE :微软ASP.NET MVC案例演示框架。 PetShop :微软ASP.NET宠物商店。 Orchard :国外一个MVC开源的博客系统。 SSCLI :微软在NET Framework 2.0时代的开源代码。 DasBlog :国外一个基于ASP.NET的博客系统。 BlogEngine.NET :国外一款免费开源的博客系统。 Dotnetnuke.NET :一套非常优秀的基于ASP.NET的开源门户网站程序。 Discuz.NET :国内开源的论坛社区系统。 nopCommerce和Aspxcommerce :国外一套高质量的开源B2C网站系统。 JumboTCMS和DTCMS :国内两款开源的网站管理系统: 日志记录异常处理: Log4Net.dll :轻量级的免费开源.NET日志记录框架。 Enterprise Library Log Application

.NET平台常用的框架整理

孤者浪人 提交于 2020-02-12 04:13:05
分布式缓存框架: Microsoft Velocity :微软自家分布式缓存服务框架。 Memcahed :一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度。 Redis :是一个高性能的KV 数据库 。 它的出现很大程度补偿了Memcached在某些方面的不足。 EnyimMemcached :访问Memcached最优秀的.NET客户端,集成不错的分布式均衡 算法 。 开源的.NET系统推荐: OXITE :微软ASP .NET MVC案例演示框架。 PetShop :微软ASP .Net 宠物商店。 Orchard :国外一个MVC开源的博客系统。 SSCLI :微软在NET Framework 2.0时代的开源代码。 DasBlog :国外一个基于ASP.NET的博客系统。 BlogEngine.NET :国外一款免费开源的博客系统。 Dotnetnuke.NET :一套非常优秀的基于ASP.NET的开源门户网站程序。 Discuz.NET :国内开源的论坛社区系统。 nopCommerce和Aspxcommerce :国外一套高质量的开源B2C网站系统。 JumboTCMS和DTCMS :国内两款开源的网站管理系统: 日志记录异常处理: Log4Net.dll :轻量级的免费开源.NET日志记录框架。 Enterprise Library Log

消息队列mq总结

谁都会走 提交于 2020-02-07 03:57:59
一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 二、消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式 a、串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。 b、并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间 假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100) 小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题呢? 引入消息队列

消息队列MQ

佐手、 提交于 2020-02-07 03:51:15
常见的企业级MQ 1. RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP。 优点: 也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个代理(Broker)构架,这意味着消息在发送到客户端之前可以在中央节点上排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。 缺点: 它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。 2. ZeroMQ ZeroMQ是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。 优点:号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZeroMQ能够实现RabbitMQ不擅长的高级/复杂的队列。 缺点: 与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。ZeroMQ非常灵活,但是你必须学习它的80页的手册(如果你要写一个分布式系统,一定要阅读它)。 应用:Twitter的Storm中使用ZeroMQ作为数据流的传输。 3. ActiveMQ ActiveMQ居于两者之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景

Storm集群部署

故事扮演 提交于 2020-01-24 13:55:50
搭建 Storm 集群的主要步骤 1. 搭建一个 Zookeeper 集群 2. 在 Nimbus 和所有工作机器(Supervisor)上安装 Storm 依赖的软件 Python-2.7.2 JAVA 7 ZeroMQ -2.1.7 JZMQ unzip 3. 配置 storm.yaml 4. 使用 Storm 脚本启动 Nimbus,Supervisor 及 UI #布置 ZK 集群 wget http://mirror.esocc.com/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz cp zookeeper-3.4.5.tar.gz /usr/local/ cd /usr/local/ tar -zxvf zookeeper-3.4.5.tar.gz ln -s /usr/local/zookeeper-3.4.5/ /usr/local/zookeeper vim /etc/profile (设置 ZOOKEEPER_HOME 和 ZOOKEEPER_HOME/bin) export ZOOKEEPER_HOME="/usr/local/zookeeper" export PATH=$PATH:$ZOOKEEPER_HOME/bin cp /usr/local/zookeeper/conf/zoo

Python 3.6 ZeroMQ (PyZMQ) asyncio pub sub Hello World

最后都变了- 提交于 2020-01-23 03:09:06
问题 I've just started with ZeroMQ and I'm trying to get a Hello World to work with PyZMQ and asyncio in Python 3.6. I'm trying to de-couple the functionality of a module with the pub/sub code, hence the following class setup: Edit 1 : Minimized example Edit 2 : Included solution, see answer down for how. import asyncio import zmq.asyncio from zmq.asyncio import Context # manages message flow between publishers and subscribers class HelloWorldMessage: def __init__(self, url='127.0.0.1', port='5555

zmq: can multiple threads PUSH in a simple PUSH-PULL pattern

泄露秘密 提交于 2020-01-22 14:56:09
问题 I have two processes: a producer which pushes messages via ZMQ to a consumer in a simple PULL-PUSH point-to-point pattern. The producer has several internal threads that send() via zmq. However, 0MQ's docs suggest not to share sockets between threads . Must I use a single thread to send? Assuming there is no strict requirement for keeping the sending order between the threads, doesn't the fact that the socket is a one-directional simplex allow multiple threads to use it without introducing

zmq: can multiple threads PUSH in a simple PUSH-PULL pattern

感情迁移 提交于 2020-01-22 14:56:04
问题 I have two processes: a producer which pushes messages via ZMQ to a consumer in a simple PULL-PUSH point-to-point pattern. The producer has several internal threads that send() via zmq. However, 0MQ's docs suggest not to share sockets between threads . Must I use a single thread to send? Assuming there is no strict requirement for keeping the sending order between the threads, doesn't the fact that the socket is a one-directional simplex allow multiple threads to use it without introducing