RocketMq灰皮书(一)------选型&RocketMQ名词 一. MQ选型对比 目前业内常用的MQ框架有一下几种: Kafka RabbitMQ RocketMQ 除此之外,还有ActiveMQ等,但是ActiveMQ目前使用已经很少了,在一些老项目中可能还能看到,因此在这里不做赘述. (1) Kafka 优点: 高吞吐量 在常规机器下,使用Kafka,一台机器可以达到每秒十几万的QPS. 高性能 消息发送性能很高,达到毫秒级别. 高可用 支持集群部署,部分机器宕机依然可以正常使用 缺点…
RocketMq灰皮书(三)------MQ使用 在使用MQ之前,我们回顾一下前两篇博文的内容. 我们大致了解了RocketMQ的四个概念,分别是:Producer,Consumer,Message和Broker 我们在本地的Windows10系统上,部署了RocketMQ和其后台系统 在本篇博文中,我们会使用使用SpringBoot构建两个微服务,一个作为生产者,一个作为消费者,通过RocketMQ传递消息,了解在Java中使用RocketMQ的方法. 一. SpringBoot整合Rocke…
RocketMq灰皮书(二)------本地部署启动MQ Windows10本地部署RocketMQ 在上一篇文章中,我们对rocket的几个基本概念进行了介绍,也了解了业内几大消息中间件的区别.在本篇博文中,我们进行RocketMQ的本地部署. 1. 下载安装 首先我们可以去RocketMQ的官网去下载源码: 官网点这里 打开官网可以看到很精美的概述,我们需要了解的地方有2个,都在上图中标记了出来: Documentation 关于rocket使用的文档介绍 Blog 社区的更新博文 简单的来…
在工作中遇到了一个这个问题,就是我们rocketmq是部署在云主机上的 但是我们的开发同事在自己的电脑连接rocketmq链接不上 报错显示Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <10.19.73.64:10911> failed 这里练级的是rocketmq云主机的内网IP,那肯定是链接不上的 这里我们就需要修改RocketMQ的 broker 的地址 #进…
1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全局搜索9876,将所有使用9876端口的地方改为9877. 在终端打开,使用:mvn -Prelease-all -DskipTests clean install命令打包,打包完成后在项目的distribution\target将会有如下两个包: 分别是linux和win下运行的包. 将后缀为.t…
在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟AciiveMQ一样,当存在多个消费者时,消息通过一定负载均衡策略,将消息分发到多个consumer中. 如图: 在RockeMQ中,通过ConsumeGroup的机制,实现了天然的消息负载均衡!通俗点来说,RocketMQ中的消息通过ConsumeGroup实现了将消息分发到C1/C2/C3/……的…
1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次数. Consumer端重试: Consumer消费消息失败后,要提供一种重试机制,令消息再消费一次,Consumer消费消息失败通常可以认为有以下几种情况 1. 由于消息本身的原因,例如反序列化失败,消息数据本身无法处理(例如话费充值,当前消息的手机被注销,无法充值)等.这种错误通常需要跳过这条消…
1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly Only Once”,而要实现以上两点,在分布式系统环 境下,不可避免要产生巨大的开销.所以RocketMQ 为了追求高性能,并不保证此特性,要求在业务上进行去重,也就是说消费消息要做到幂等性.RocketMQ 虽然不能严格保证不重复,但是正常情况下很少会出现重复发送.消 费情况,只有网络异常,Con…
前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.123 root nameServer1,brokerServer1 Master1 (2) 47.105.149.61 root   nameServer2,brokerServer2   Master2 2. 修改hosts环境 两台机器同时修改:vim /etc/hosts 重启网卡:servi…
RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服务器上. 2.这里有关 Broker 和 NameServer 分别都做了了集群部署(各部署两个),且BroKer是按两主进行部署. 之所以选用Docker部署主要还是考虑 :通过Docker部署RocketMQ集群更快速,而且对系统的资源利用更好! 之前有写过Liunx如何部署Docker的博客:…
最近对系统进行压测,发现发送消息到消息队列的时候出现如下错误: com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2  DESC: [TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 201ms, size of queue: 1 经查询发现RocketMq在4.1版本以后为producer增加了2个配置,…
JAVA操作rocketmq: 1.导入rocketmq所需要的依赖: <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>3.0.10</version> </dependency> <dependency> <groupId>com…
1. PushConsumer 推,Broker主动向Consumer推消息,它Consumer的一种,应用通常向对象注册一个Listener接口,一旦接收到消息,Consumer对象立刻回调Linstener接口方法.Push方式里,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感觉消息是被推送过来的. 缺点: 慢消费无疑是Push模式最大的致命伤,如果消费者的速…
1. 事务消息原理图 RocketMQ除了支持普通消息,顺序消息之外,还支持了事务消息. 1. 什么是分布式事务? 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败.本质上来说,分布式事务就是为了保证不同数据库的数据一致性. 2. RocketMQ中分布式事务的…
1. 顺序消息原理图 2. 什么是顺序消息? 消费消息的顺序要求同发送消息的顺序一致,在RocketMQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,并且发送给到同一队列,这样Consumer就可以按照Producer发送的顺序去消费消息. 2.1 普通顺序消息 正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致. 如果业务能够容忍在集群异常(如某个Broker…
在RocketMQ中提供了三种发送消息的模式: 1.NormalProducer(普通) 2.OrderProducer(顺序) 3.TransactionProducer(事务) 下面来介绍一下producer中的各个API的使用: 1. producerGroup:Producer组名, 默认值为DEFAULT_PRODUCER,多个Producer如果属于一个应用,发送同样的消息,则应该将它们归为同一组. 2. createTopicKey: 默认值为TBW102,在发送消息时,自动创建服…
1. RocketMQ主要的9个模块,如图: 2. 模块介绍 1. rocketmq-common:通用的常量枚举,基类方法或者数据结构,按描述的目标来分包,通俗易懂.报名有admin,consumer,filter,hook,message等. 2. rocketmq-remoting:用Netty写的客户端和服务端,fastjson做的序列化,自定义二进制协议 3. rocketmq-sevutil: 只用一个ServerUtil类,类注解是,只提供Server程序依赖,目的是为了拆解客户端…
1.  添加依赖 pom.xml如下: <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.1</version> </dependency> <dependency> <groupId>org.apache.rocketmq&l…
1. 下载rocketmq-console-ng 官网地址:https://github.com/apache/rocketmq-externals 拉下来之后,使用idea打开rocketmq-console,在application.properties配置文件中修改rocketmq.config.namesrvAddr(前面集群环境下的nameserver的ip:port),如下: rocketmq.config.namesrvAddr=rocketmq-nameserver1:9876;…
1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Broker部署相对比较复杂的,Broker分为Master和Slave,一个Master可以对应多个Slave,但是多个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerID来定义,BrokerId为o表示Master,非o表示S…
1. 什么是RocketMQ? 是一个队列模型的消息中间件,具有高性能.高可靠.高实时.分布式特点. Producer.Consumer.队列都可以分布式.  Producer 吐一些队列轮流収送消息,队列集合称为Topic,Consumer 如果做广播消费,则一个consumer 实例消费返个Topic 对应的所有队列,如果做集群消费,则多个Consumer 实例平均消费返个topic 对应的 队列集合. 能够保证严格的消息顺序 提供丰富的消息拉叏模式 高效的订阅者水平扩展能力 实时的消息订阅…
1. 安装 Namesrv 拉取镜像 docker pull rocketmqinc/rocketmq:4.4.0` 启动容器 docker run -d -p 9876:9876 -v {RmHome}/data/namesrv/logs:/root/logs -v {RmHome}/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketm…
由于消息的消费方式有两种,所以两种方式也有不同的API: 1. PushConsumer的配置 1. consumerGroup: 默认值为DEFAULT_CONSUMER,Consumer组名,多个Consumer如果属于一个应用,订阅同样的消息,且消费逻辑一致,则应该将它们归为同一组 2. messageModel: 消息模型,默认值为CLUSTERING,支持集群消费,广播消费两种模型 3. consumeFromWhere: 默认值为CONSUME_FROM_LAST_OFFSET,Co…
rocketmq总结(消息的高可用.中间件选型) 参考: https://blog.csdn.net/meilong_whpu/article/details/76922456 http://blog.51cto.com/sofar/1540874 https://blog.csdn.net/lunaqi/article/details/78517200 https://mp.weixin.qq.com/s?__biz=MzIwMzg1ODcwMw==&mid=2247487688&idx…
之前本人在实际的生产环境中,使用过activemq和rabbitmq消息队列,在使用过程中出现一些难以解决的问题,本文通过产品选型.网络架构和核心特性分析了rocketmq的优势和特性. 产品选型 我们在进行中间件选型时,一般都是通过下面几点来进行产品选型的: 1.性能 2.功能支持程度 3.开发语言(团队中是否有成员熟悉此中间件的开发语言,市场上此种语言的开发人员是否好招) 4.有多少公司已经在生产环境上实际使用过,使用的效果如何 5.社区的支持力度如何 6.中间件的学习程度是否简单.文档是否…
参考: 开源社区:https://github.com/alibaba/RocketMQ rocketmq入门: http://www.cnblogs.com/LifeOnCode/p/4805953.html 考拉哥的博客: http://lifestack.cn/archives/tag/rocketmq [简书]rocketmq原理和实践:http://www.jianshu.com/p/453c6e7ff81c 一.ROCKETMQ简介 11 月 28 日,阿里巴巴宣布将开源分布式消息中…
目录 一.引言 二.介绍 三.Rocketmq关键概念 1.主题与标签 2.发送与订阅群组 3.Broker与NameServer 4.广播消费与集群消费 5.消息队列 6.集群方式 7.顺序消息 8.数据存储结构 四.所有消息中间件 涉及的业务问题(随便看看) 1.Publish/Subscribe 发布订阅 2.Message Priority 消息优先级 3.Message Order 消息有序 4.Message Filter 消息过滤 5.Message Persistence 消息持…
使用消息中间件可以解决高并发,那是因为消息中间件可以将消息缓存到队列之中. 但是 当消息 过多的时候,几万,几十万...消息中间件也可能会宕机,所以我们可以对消息中间件进行集群,在之前的activemq中 activemq支持jms规范,点对点 发布订阅 消息模型,但是不支持分布式 (不支持集群) ,或者说集群比较麻烦 需要用到zk,activemq消息堆积能力没rocetmq消息堆积能力强  每年的双11 都是经过了验证的 但是 rocetmq 就支持分布式,集群.它的消息队列缓存的消息 比a…
产品选型 我们在进行中间件选型时,一般都是通过下面几点来进行产品选型的: 1.性能 2.功能支持程度 3.开发语言(团队中是否有成员熟悉此中间件的开发语言,市场上此种语言的开发人员是否好招) 4.有多少公司已经在生产环境上实际使用过,使用的效果如何 5.社区的支持力度如何 6.中间件的学习程度是否简单.文档是否详尽 7.稳定性 8.集群功能是否完备 ... 如果从以上8点来选型一个消息队列,作为一名熟悉java的程序员,当遇到重新选择消息队列的场景时,我会毫不犹豫的选型rocketmq,rock…
1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 选用理由: 强调集群无单点,可扩展,任意一点高可用,水平可扩展. 海量消息堆积能力,消息堆积后,写入低延迟. 支持上万个队列 消息失败重试机制 消息可查询 开源社区活跃 成熟度(经过双十一考验) 1.2. 关键概念  1.2.1. 主题与标签 主题Tpoic:第一级消息类型,…