聚合文章列表
12 浏览

RabbitMQ(一)AMQP简介

在开始我们的RabbitMQ教程分享之前,让我们首先了解一下AMQP协议,它是RabbitMQ实现消息服务依赖的基础。1.什么是AMQPAMQP,AdvancedMessageQueuingProtocol,翻译成中文即高级消息队列协议。它是一个提供统一消息服务的应用层二进制协议。基于此协议的客户端与消息中间件可传递消息,并不受不同平台、开发语言和操作系统的影响,即可跨平台传输。2.AMQP模型下面是AMQP模型的简要示意图:AMQP模型从上图,我们可以了解到AMQP包括以下主要组件和逻辑概念Publisher(生产者):消息生产者,AMQP定义了消息的格式,所以生产者需要按照AMQP消息格式生产数据。Broker(服务器):Broker是一个物理上的服务器(或虚拟机),它是部署了消息中间件并接收处理客户端请求的实体。Exchange(交换机):它是一个逻辑上的概念,负责接收消息,是整个消息中间件的入口。Queue(队列):它负责保存消息,并将消息转发给消费者。Binding(绑定):它是Exchange与Q

消息系统 2017-10-22 发布
12 浏览

Kafka(Quickstart)

ThistutorialassumesyouarestartingfreshandhavenoexistingKafkaorZooKeeperdata.SinceKafkaconsolescriptsaredifferentforUnix-basedandWindowsplatforms,onWindowsplatformsusebin\windows\insteadofbin/,andchangethescriptextensionto.bat.第一步:下载kafka第二步开启服务指令:zookeeper-server-start.shserver.properties创建createatopickafka-topics-sh--create--zookeepermaster:2181--replication-factor1--partitions1--topictest看创建结果kafka-topics-

消息系统 2017-10-22 发布
19 浏览

Kafka 源码解析之 Consumer 如何加入一个 Group(六)

距离上一篇博客(2017-09-10),到现在已经过去一个多月了,理论上这篇文章在上个月就应该写完,无奈拖延症又犯了,一直以这部分过于复杂为借口拖了好久,这两天逼了自己一把,先整理出其中的一篇,后续要加把劲,要不然今年的年度计划(年底前把这个系列写完)就完不成了,废话到此为止,下面步入正文。在Kafka中,Consumer的复杂度要比producer高出很多,对于Producer而言,没有producer组的概念的、也不需要careoffset等问题,而Consumer就不一样了,它需要关注的内容很多,需要考虑分布式消费(ConsumerGroup),为了防止重复消费或者部分数据未消费需要考虑offset,这些都对Consumer的设计以及Server对其处理提出了很高的要求。本来计划是先进行综述,然后再分别介绍各个模块,现在打算反过来,先介绍各个模块,最后再进行综述,本篇为Consumer源码分析开篇,先从一个Consumer实例如何加入一个ConsumerGroup讲起。这里的分析是以

消息系统 2017-10-22 发布
AD 友情赞助
17 浏览

MQTT深入浅出系列(一)

使用获取源码文件github上是没有mqtt源码的,虽然我们能从远程依赖上拿到jar包,但是因为java文件编译后成class文件后注释、常量、以及部分方法都发生了一些变化,可读性很差,那我们如何拿源码呢,当然是jcenter了,如图:在jcenter官网上搜索关键字:eclipse.paho.client.mqttv3点进去后,找一下以下文件,如图的那个就是java文件(下载下来后改成zip格式,然后解压就好啦)在此源码上,对mqtt进行封装,便于调用,具体实现请访问我的github:https://github.com/fighter-lee/EasyMqtt如何使用Androidstudio添加如下依赖:compile'top.fighter-lee:mqttlibs:1.0.1'搭建服务器如果有自己的mqtt服务器的话,请跳过此步骤。请点击,下载Apollo服务器,安装。命令行进入安装目录bin目录下。D:cdD:\develop\tools\apache-apollo-1.7.1\bin

消息系统 2017-10-22 发布
14 浏览

MQTT深入浅出系列(二)

mqtt源码分析为什么要分析源码呢,一是为了需求扩展,二也是为了学习优秀的源代码。连接逐层跟代码,到ClientComms类,该类用于与server通讯,发送和接收mqtt协议消息。先看connect代码:publicvoidconnect(MqttConnectOptionsoptions,MqttTokentoken)throwsMqttException{finalStringmethodName="connect";synchronized(conLock){if(isDisconnected()&&!closePending){//@TRACE214=state=CONNECTINGconState=CONNECTING;conOptions=options;MqttConnectconnect=newMqttConnect(client.getClientId(),conOptions.getMqttVersion(),conOptions.isCleanSession

消息系统 2017-10-22 发布
15 浏览

RabbitMQ入门教程(概念,应用场景,安装,使用)

RabbitMQ简介RabbitMQ是一个在AMQP(AdvancedMessageQueuingProtocol)基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。AMQPAMQP,即AdvancedMessageQueuingProtocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。消息队列MQ全称为MessageQueue,消息队列。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。队列的使用除去了接收和发送应用程序同时执行的要求。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了

消息系统 2017-10-23 发布
AD 友情赞助
15 浏览

MQTT——入门介绍

主题MQTT笔者相信大家对HTTP一定不能陌生。"HTTP协议的三次握手四次挥手"相信也略有耳闻。HTTP协议的优势相信大家都明白。不然他不会这流行。然而这并不能忽略他的缺点。最大的特点就是无状态。有没有人做过推送的业务。这个时候用HTTP协议显然是多么SB的事情。笔者有见过一款手机APP。他即然是在客户端那边开起一个后台线程然后每一段时间去请求一下服务器,来更新客户端的信息。不是说不行,可是你们不觉得这样做太伤了吗?HTTP协议是请求/响应的模式进行的。当然这样子很简单,但优缺点也很明显。也许可能这就是出现很多通信协议——XMAP协议、MQTT协议、CoAP协议等。最近笔者因为公司任务不得不去了解一下MQTT协议。所以才会有了这一系列的出现。如果读者们在百娘上面查找MQTT的话,就会出现很多关于MQTT的介绍。下面是笔者常用的几个网站。中文MQTT站点:https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details英文MQTT站点:http://public.dhe.ibm.com/s

消息系统 2017-10-23 发布
19 浏览

OneAPM 工作两年总结

掐指一算,从OneAPM离职也快一个月了,在OneAPM工作的种种,仿佛还像是在昨天。细数两年的工作经历,我很庆幸在恰当的时间点和这么一群有激情有活力的人共事。那么,是时候总结一下我在OneAPM做的牛(cai)逼(ji)事情了。大家好,今天由我来分享一下,我在上家公司做的Ai和告警相关的一些内容。首先,我先简单介绍一下,今天我要分享的两个项目:Ai是OneAPM服务器端应用性能监控分析程序,它主要是能收集Java、CSharp、Python等偏后端语言的系统的一些指标数据。然后分析出调用Trace和完整的调用拓扑图,还有一些其他图表数据的展示。告警系统原先作为一个Ai系统的子模块,用的是流式计算框架Flink,后面不能满足对外交付和业务功能需求。我们就重新设计开发了纯粹的CEP计算引擎,依托于此在Ai上构建了新的告警系统,然后服务化拆分成独立的告警系统,并接入了其他类似Ai的业务线。这次分享,一是我对以前2年工作的整理和思考,二也是和大家交流学习。对于Ai,我不属于它的主要研发,我只是在

消息系统 2017-10-23 发布
15 浏览

使用StatefulSet部署有状态应用

StatefulSet这个对象是专门用来部署用状态应用的,可以为Pod提供稳定的身份标识,包括hostname、启动顺序、DNS名称等。下面以在kubernetes1.6版本中部署zookeeper和kafka为例讲解StatefulSet的使用,其中kafka依赖于zookeeper。Dockerfile和配置文件见zookeeper和kafka。注:所有的镜像基于CentOS系统的JDK制作,为我的私人镜像,外部无法访问,yaml中没有配置持久化存储。本文同时归档到kubernetes-handbook部署ZookeeperDockerfile中从远程获取zookeeper的安装文件,然后在定义了三个脚本:zkGenConfig.sh:生成zookeeper配置文件zkMetrics.sh:获取zookeeper的metricszkOk.sh:用来做ReadinessProb我们在来看下这三个脚本的执行结果:zkGenConfig.shzkMetrics.sh脚本实际上执行的是

消息系统 2017-10-23 发布
AD 友情赞助
15 浏览

聊聊replication的方式

序本文主要聊一聊主流开源产品的replication方式。replicationreplication和partition/sharding是分布式系统必备的两种能力。具体详见复制、分片和路由.对于海量数据来说,replication一方面可以增加冗余,保证系统可用性,一方面还可以提升读取的效率。本文主要聚焦于replication,即假设每个node都足以存下整个副本。replicationtype按照有无leader以及leader数目可以分为:singleleaderreplication即一主多从的复制方式,由leader同步/通知follower,只有leader能接受写操作,follower只能读不能写。multileaderreplication即多主多从,有多个leader分布在不同node,同时接受写入操作,而每个leader之间相互为follower。比较适合多数据中心的场景,不过对于并发写多数据中心冲突解决的复杂度也增加。leaderlessreplication无

消息系统 2017-10-23 发布
11 浏览

Apache Qpid Proton 0.18.0 发布,轻量级消息库

ApacheQpidProton0.18.0已发布,ApacheQpidProton是AMQP1.0的消息库,高性能,轻量级,应用广泛。该版本带来了大量的新特性、改进,以及bug修复,部分包括:PROTON-749-RefactorProtonCtransportcodePROTON-1175-DocumentBlockingConnectionresourcecleanupPROTON-1339-Event_loopinjectionisveryslowtotriggertheeventsPROTON-1347-Containerprintstostderronconnectiontimedout

消息系统 2017-10-24 发布
12 浏览

Docker下的Kafka学习之一:制作集群用的镜像文件

尽管之前写过《Docker下kafka学习,三部曲》系列,但是单机版的入门练习并不满足实际工作的需要,从本章起,我们一起来研究和探索Kafka这个优秀的异步消息系统,为实际工作积累更多的实战经验。从镜像制作开始本章我们一起把kafka集群用到的镜像文件做出来,后续的实践都用这个镜像来进行;功能梳理这个镜像能提供哪些功能呢?1.可以ssh登录,这是为了后续操作方便;2.jdk1.8.0_144版本,因为zookeeper需要运行在jvm;3.zookeeper-3.4.6;4.kafka_2.9.2-0.8.1;5.把kafka_2.9.2-0.8.1/bin加入到PATH中,这是为了后续执行kafka-topics.sh、kafka-console-producer.sh等命令时方便;构造Dockerfile前准备的材料本次构造Dockerfile所需的所有材料我已经上传到github上了,地址是:git@github.com:zq2599/kafka_2.9.2-0.8.1-zookeeper-

消息系统 2017-10-24 发布
AD 友情赞助
15 浏览

Windows下安装RabbitMQ

今天正好给自己机器安装rabbitmq,总结下安装经验。现在国内访问erlang,和RabbitMQ官网好像都很难连上。我已下载好了资源,需要的朋友可以下载。链接:https://pan.baidu.com/s/1nuPk4NR密码:ge7z1.Windows下安装RabbitMQ需要以下几个步骤1)安装erlang。RabbitMQ服务端代码是使用erlang编写的。下载地址:http://www.erlang.org/downloads选一个版本双击.exe文件进行安装即可。安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录,同时将%ERLANG_HOME%\bin加入到Path中,最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功;2)下载RabbitMQ,下载地址:http://www.rabbitmq.com/,同样双击.exe进行安装就好3)安装RabbitMQ-Plugins,这个相当于是一个管理界

消息系统 2017-10-24 发布
13 浏览

Android 消息机制(二)Handler对消息机制的使用

Android消息机制(一)消息队列的创建与循环的开始Looper与MessageQueue中讲述了消息机制的底层实现,下面就从平时所常用的Handler来讲述消息机制的使用。HandlerHandler是我们平时进行异步、多线程开发中常用的一个组件,如果在应用主线程中调用阻塞的或者资源消耗量大的任务,会造成UI的更新卡顿,所以我们会将这样的任务放在新的线程中进行操作。当需要通知UI进行更新时,我们会使用Handler创建消息丢入主线程的消息队列,再等待主线程的Handler的处理方法随着消息的处理而被调用,再进行下面的操作。这是Handler的基本用法,它的实现就与消息机制密切相关。下面我们就对它的实现进行分析。构造Handler的构造方法中除了实现默认参数的相互调用外,有内容的有这么两个:publicHandler(Callbackcallback,booleanasync){...mLooper=Looper.myLooper();if(mLooper==n

消息系统 2017-10-24 发布
14 浏览

Abp系列——集成消息队列功能(基于Rebus.Rabbitmq)

以上几点,并非互相独立,是几个互相联系的特点。开发框架拥有消息队列机制的好处,可以通过以下几个典型场景举例来说明:订单支付成功当第三方支付平台回调通知订单支付成功时,如果没有消息队列,那么:我们必须把后续的业务逻辑和修改订单支付状态的代码都写在一起,根据业务的复杂程度,这个响应时间可能会非常长,容易造成超时或者第三方支付平台短时间重试多次,造成业务逻辑重复执行也可能业务逻辑比较复杂,后续其他逻辑(通知推送之类)处理异常,导致整个支付成功逻辑全部回滚而当我们有消息队列机制支持时:我们一接收到第三方支付平台回调,立马仅处理订单状态和核心的业务逻辑(比如支付后扣库存),其他业务逻辑通过订阅消息去处理甚至可以一接收到第三方支付平台回调,立即构建订单支付成功消息放入消息队列,这样对于第三方支付平台可以立即收到处理成功的响应后续其他类似通知推送的非关键需求,其成败不影响关键逻辑,而且可以一直重试直到成功物流信息同步做电商网站时,如果订单比较多,每个订单都需要订阅第三方物流信息,类似上面支付,当物流信息(一个订单多条运送路径记录)推送过来时,可

消息系统 2017-10-25 发布
16 浏览

2017年的数据工程生态系统

2017年的数据工程生态系统自从我们在2014年推出InsightDataEngineeringFellows计划以来,我们与数据行业的75多个团队建立了联系,讨论了顶级团队(如Facebook,Airbnb,Slack,纽约时报,LinkedIn,亚马逊和Tesla)工程师面临的最新挑战。此外,我们不断增长的校友网络现在有着150多名工程师和750多名数据科学家,经常在Insight社区分享他们的经验。感谢这个强大的社区,我们有一个探索数据领域技术新兴模式的独一无二的基地。我们不断探索将这些知识传递给下一代数据工程师和扩散的更多数据社区的方法,开发了更为互动的数据工程生态系统图,该迭代提供了数据管道核心组件的简化视图,同时更深入地探索了分布式系统技术的复杂世界。数据工程趋势通过更新此地图,我们已经反映了当前数据团队可用的工具和服务的最新变化。强调了一些值得注意的趋势。科技融合:Kafka和Spark尽管有着数量巨大的工具被引入数据工程领域,似乎有两个显着的趋同点。在众多可用的排队技术中,Kafka是最广泛采用的。

消息系统 2017-10-25 发布
14 浏览

Apache Kafka开源流式SQL

KSQL是一个用于Apachekatkatm的流式SQL引擎。KSQL降低了进入流处理的门槛,提供了一个简单的、完全交互式的SQL接口,用于处理Kafka的数据。你不再需要用Java或Python这样的编程语言编写代码了!KSQL是开源的(Apache2.0许可)、分布式的、可扩展的、可靠的和实时的。它支持广泛的强大的流处理操作,包括聚合、连接、窗口、会话,等等。一个简单的例子查询流数据是什么意思,这与SQL数据库有什么区别呢?实际上,它与SQL数据库有很大的不同。大多数数据库都用于对存储数据进行按需查找和修改。KSQL不进行查找(但是),它所做的是连续的转换——也就是,流处理。例如,假设我有一个来自用户的点击流,以及一个关于这些用户不断更新的帐户信息的表。KSQL允许我对这一串单击和用户表进行建模,并将两者结合在一起。即使这两件事之一是无限的。因此,KSQL所运行的是连续查询——在Kafka主题的数据流中,连续不断地运行新数据。相反,传统数据库对关系数据库的查询是一次性查询——在数据库中运行一次SELECT语句获取有限行

消息系统 2017-10-26 发布
12 浏览

《WCF服务编程》关于“队列服务”一个值得商榷的地方

摘要:今天写《WCF技术剖析(卷2)》关于“队列服务”部分,看了《WCF服务编程》相关的内容。里面介绍一个关于“终结点不能共享相同的消息队列”说法,个人觉得这值得商榷。撰写此文,希望对此征求大家的意见。[源代码从这里下载]目录一、“终结点不能共享相同的消息队列”二、实...今天写《WCF技术剖析(卷2)》关于“队列服务”部分,看了《WCF服务编程》相关的内容。里面介绍一个关于“终结点不能共享相同的消息队列”说法,个人觉得这值得商榷。撰写此文,希望对此征求大家的意见。[源代码从这里下载]目录一、“终结点不能共享相同的消息队列”二、实践出真知三、为什么同一个服务的终结点可以共享相同的消息队列四、为什么不同服务的终结点不能共享相同的终结点一、“终结点不能共享相同的消息队列”在《WCF服务编程(第三版)》的第9章《QueuedService》,JuvalLöwy是这样说的:"WCFrequiresyoutoalwaysdedicateaqueueperendpointforeachse

消息系统 2017-10-26 发布
33 浏览

关于celery django django-celery版的搭配的报错问题及解决方法

G:\python3_django\DFpro\mypro(win)(py3_django)λpythonmanage.pyceleryworker--loglevel=infoTraceback(mostrecentcalllast):File"manage.py",line10,inexecute_from_command_line(sys.argv)File"C:\virtualenv\py3_django\lib\site-packages\django\core\management\__init__.py",line364,inexecute_from_command_lineutility.execute()File"C:\virtualenv\py3_django\lib\site-packages\django\core\management\__init__.py",line356,inexecuteself.fetch_command(subcom

消息系统 2017-10-26 发布
17 浏览

决战秋名山!华为云消息队列DMS联手老司机kafka

秋名山的云端,终年云雾弥漫,人迹罕至,但这一切不妨碍它成为竞速者的乐园。在最接近云端三KB的路段,蜿蜒狭长,不可预料,他要求挑战者支持高并发的多线操作,并在电石光火间正确有序地处理浪涌的海量数据。在这条极限赛道上,神车Kafka自七年前出道以来,已经很久没有遇到过对手了。"我知道你的苦",一辆车头印着硕大镁光菊花LOGO的新面孔出现在Kafka面前。Kafka:"……你是?"神秘车:"在这3kb里,你虽然没有了对手,但你每次部署要多久?改bug多久?系统升级头大不?下了山在平稳的公路上,你还能不能打败Mq,Redis那帮老家伙?"Kafka放下手中正在调试的bug惊诧道:"……你是谁,想怎样,快说说有什么办法?""我叫DMS,我已经完全兼容了你,并把你复杂的运维和部署自动化,还有你不具备的(此处省略一万字)能力,只要你我DK联手,天下我有,你要不要考虑下?"神秘车说道。Kafka沉默了半晌,望着秋名山下依稀阑珊的夜色淡淡的说:"好吧,你说的对,是时候该跟你走了。"一万字DMS能力描述详细如下简介:分布式消

消息系统 2017-10-27 发布
AD 友情赞助