rocketmq部署

消息队列的一些知识

天涯浪子 提交于 2019-12-03 13:02:01
这里总结一些MQ(Message Queue,消息队列)的相关知识。 消息队列的优点 解耦 在传统模式下,系统之间的耦合性太强,比如系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码。 如果将消息写入消息队列,需要消息的系统自己从消息队列中订阅,在D系统接入的时候系统A也不需要做任何修改,达到了解耦的效果。 异步 在传统模式下,一些非必要的业务逻辑以同步的方式运行,需要等待上一个业务逻辑执行完毕才能开始执行下一个业务逻辑,耗费等待的时间。 如果将消息写入消息队列,非必要的业务逻辑就可以以异步的方式运行,加快了服务响应的速度。 削峰 在传统模式下,当并发量大的时候,所有的请求都会直接怼到数据库,造成数据库连接异常,甚至宕机。 如果将消息写入消息队列,则系统A可以慢慢地按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。 消息队列的缺点 我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。一个使用了MQ的项目,如果连MQ的缺点都没有考虑过,就把MQ引进去了,那就会给自己的项目带来风险。 系统可用性降低 你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去,那消息队列挂了,系统也就挂了。用专业的术语来解释,就是系统的可用性降低了。 系统复杂性增加

Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比(转)

二次信任 提交于 2019-12-03 10:55:51
前言 在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。 概念 MQ简介 MQ,Message queue,消息队列,就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等,用来保存数据的。当然,与数据库、缓存等产品比较,也有自己一些特点,具体的特点后文会做详细的介绍。 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、MetaMQ,当然近年来火热的kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大,虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,介绍MQ的特点。 MQ特点 1、先进先出 不能先进先出,都不能说是队列了。消息队列的顺序在入队的时候就基本已经确定了,一般是不需人工干预的。而且,最重要的是,数据是只有一条数据在使用中。 这也是MQ在诸多场景被使用的原因。 2、发布订阅 发布订阅是一种很高效的处理方式,如果不发生阻塞,基本可以当做是同步操作。这种处理方式能非常有效的提升服务器利用率,这样的应用场景非常广泛。 3、持久化 持久化确保MQ的使用不只是一个部分场景的辅助工具,而是让MQ能像数据库一样存储核心的数据。 4、分布式 在现在大流量

【转】分布式之消息队列复习精讲

眉间皱痕 提交于 2019-12-03 09:36:13
转自: https://www.cnblogs.com/rjzheng/p/8994962.html 引言 为什么写这篇文章? 博主有两位朋友分别是小A和小B: 小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。 小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点说,就是调调API。对为什么使用这些中间件啊?如何保证高可用啊?没有充分的认识。 庆幸的是两位朋友都很有上进心,于是博主写这篇文章,帮助他们复习一下关于消息队列中间件这块的要点 复习要点 本文大概围绕如下几点进行阐述: 为什么使用消息队列? 使用消息队列有什么缺点? 消息队列如何选型? 如何保证消息队列是高可用的? 如何保证消息不被重复消费? 如何保证消费的可靠性传输? 如何保证消息的顺序性? 我们围绕以上七点进行阐述。需要说明一下,本文不是《消息队列从入门到精通》这种课程,因此只是提供一个复习思路,而不是去教你们怎么调用消息队列的API。建议对消息队列不了解的人,去找点消息队列的博客看看,再看本文,收获更大 正文 1、为什么要使用消息队列? 分析 :一个用消息队列的人,不知道为啥用,这就有点尴尬

RocketMQ笔记1-简介-单点模式-生产者消费者的使用-工作流程

非 Y 不嫁゛ 提交于 2019-12-03 02:30:55
简介 RocketMQ是一款分布式,队列模型的消息中间件 RocketMQ开发者指南 单机版安装 通过docker安装RocketMQ Server + Broker + Console,至少需要 2G 内存 docker-compose.yml 如下: version: '3.5'services: rmqnamesrv: image: foxiswho/rocketmq:server container_name: rmqnamesrv ports: - 9876:9876 volumes: - ./data/logs:/opt/logs - ./data/store:/opt/store networks: rmq: aliases: - rmqnamesrv rmqbroker: image: foxiswho/rocketmq:broker container_name: rmqbroker ports: - 10909:10909 - 10911:10911 volumes: - ./data/logs:/opt/logs - ./data/store:/opt/store - ./data/brokerconf/broker.conf:/etc/rocketmq/broker.conf environment: NAMESRV_ADDR: "rmqnamesrv

RocketMQ

匿名 (未验证) 提交于 2019-12-03 00:27:02
一、背景 随着移动互联网的迅猛发展,各大互联网公司的体量、业务呈现指数式增长,在业务的反哺与逼迫下,分布式技术架构随之遍地开花,其中以SOA服务技术架构,微服务技术架构等为主的分布式架构如火如荼地发展。在这种大趋势之下,互联网企业也开始面临着数据采集,数据异构,系统整合等诸多问题,而CORBA、DCOM、RMI等RPC中间件技术也应运而生,但由于采用RPC同步处理技术,在性能、健壮性、可扩展性上都存在着诸多缺点,消息队列以异步处理,非阻塞调用的技术模型悄然登场,并迅速成为分布式架构的宠儿。 二、主流消息队列比较 以下表格摘取自apache rocketmq官方文档 阿里云消息队列上有另外一份对比: https://help.aliyun.com/document_detail/52577.html?spm=a2c4g.11186623.6.540.WVgch7 为何选择RocketMQ 消息不丢失【重点】 强大的技术团队,健壮的社区力量 采用Java编写实现,技术体系上更符合团队抉择 架构主轻量,组件无状态,可独立部署 高可用性,高吞吐量,性能好 经历多年阿里巴巴双十一挑战,不管是从业务复杂度,还是高流量并发都扛下来了,故而实践上毋庸置疑 三、简而言之RocketMQ架构 RocketMQ架构分为四个模块 1、生产者 2、消费者 3、namesrv 4、broker 3.1

Kafka、RabbitMQ、RocketMQ等消息中间件的对比 ―― 消息发送性能和区别

匿名 (未验证) 提交于 2019-12-03 00:22:01
原文: http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/?utm_source=tuicool&utm_medium=referral 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。 那么,消息中间件性能究竟哪家强? 带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、RabbitMQ、RocketMQ)做了性能比较。 Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。 RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

Docker本地部署RocketMq

匿名 (未验证) 提交于 2019-12-03 00:03:02
部署流程 前期准备 本地环境: macOS 10.14.6 docker 1.拉取官方镜像 docker pull rocketmqinc / rocketmq 成功拉取可以看到对应镜像: 2.运行docker容器 运行nameserver: docker run - d - p 9876 : 9876 - v ` pwd ` / data / namesrv / logs : /root/ logs - v ` pwd ` / data / namesrv / store : /root/ store -- name rmqnamesrv rocketmqinc / rocketmq sh mqnamesrv 运行broker: docker run - d - p 10911 : 10911 - p 10909 : 10909 - v ` pwd ` / data / broker / logs : /root/ logs - v ` pwd ` / data / broker / store : /root/ store -- name rmqbroker -- link rmqnamesrv : namesrv - e "NAMESRV_ADDR=namesrv:9876" rocketmqinc / rocketmq sh mqbroker - c / opt /

RocketMQ------快速体验(单机版)

匿名 (未验证) 提交于 2019-12-02 23:43:01
引言 为什么使用消息队列呢?消峰,解耦,异步这些都是使用消息队列的好处;但是项目中引入任务一门中间件时都需要考虑其利弊(维护成本是否大,性能是否稳定,社区是否活跃…)。嘿嘿,说这些都是扯淡,在我公司中RocketMQ起着解耦的作用,由于项目中数据服务覆盖放放面面,有许多公司每天都要从我们项目中拿到相关数据。 单机版部署流程 下载 zip 编辑着两个cmd,主要时修改启动堆大小参数 runserver . cmd set "JAVA_OPT = % JAVA_OPT % - server - Xms500m - Xmx500m - Xmn250m - XX : MetaspaceSize = 50 m - XX : MaxMetaspaceSize = 60 m" 在其中还可以看到垃圾回收器等信息 runboker . cmd set "JAVA_OPT=%JAVA_OPT% -server -Xms500m -Xmx500m -Xmn250m" 启动mqnameser.cmd 启动 mqbroker.cmd -n localhost:9876 代码 main版本生产者 import org . apache . rocketmq . client . exception . MQClientException ; import org . apache . rocketmq .

RocketMq之Netty通讯源码解析

时光怂恿深爱的人放手 提交于 2019-12-02 03:33:30
1,RocketMq四大核心组件: 在 RocketMQ里,有以下几个核心的模块: Producer , Consumer , Broker , NameSrv 。他们之间的关系如下 先简单了解一下各个模块的功能,下面会有章节详细介绍各个模块的功能。 Producer和Consumer很好理解,顾名思义就是生产者和消费者,生产者负责生产消息,消费者负责消费消息,这2块的逻辑都是由业务使用者定义的。 Broker是RocketMQ的核心,Broker实现了 消息的存储、拉取 等功能。 Broker通常以集群方式启动,并可配置主从,每个Broker上提供对指定topic的服务。理解了Broker的原理,以及和其他服务交互的方式就基本弄懂了整个消息中间件的原理。 NameSrv是一个无状态的名称服务,可以集群部署。所有Broker启动的时候会向NameSrv注册自己的信息。Producer会根据目标topic从NameSrv获取到达指定Broker的路由信息,Consumer同理。 对于 Producer端RocketMQ采用了轮询的方式保证了负载均衡,Consumer端通常采用cluster集群方式消费消息,我们可以自己定义消息在消息端的分配方式。另外,MQ还提供了顺序消息的特性,简单了解一下MQ提供的特性即可,具体实现后面章节会进行阐述。 2,RocketMQ包结构详析:

该如何选择消息队列?

喜欢而已 提交于 2019-12-01 15:59:57
转自 : https://my.oschina.net/u/4232045/blog/3117247 在高并发业务场景下,消息队列在流量削峰、解耦上有不可替代的作用。当前使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Pulsar 等。 消息队列这么多,到底该选择哪款消息队列呢? 选择消息队列的基本标准 虽然这些消息队列在功能和特性方面各有优劣,但我们在选择的时候要有一个基本标准。 首先,必须是开源的产品。开源意味着,如果有一天你使用的消息队列遇到了一个影响你系统业务的 Bug,至少还有机会通过修改源代码来迅速修复或规避这个 Bug,解决你的系统的问题,而不是等待开发者发布的下一个版本来解决。 其次,这个产品必须是近年来比较流行并且有一定社区活跃度的产品。流行的好处是,只要使用场景不太冷门,遇到 Bug 的概率会非常低,因为大部分遇到的 Bug,其他人早就遇到并且修复了。在使用过程中遇到的一些问题,也比较容易在网上搜索到类似的问题,然后很快的找到解决方案。还有一个优势就是,流行的产品与周边生态系统会有一个比较好的集成和兼容。 最后,作为一款及格的消息队列,必须具备的几个特性包括: 消息的可靠传递:确保不丢消息; Cluster:支持集群,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息; 性能:具备足够好的性能