rocketmq部署

SpringBoot如何优雅的使用RocketMQ

ぃ、小莉子 提交于 2019-12-30 23:22:57
MQ,是一种跨进程的通信机制,用于上下游传递消息。在传统的互联网架构中通常使用MQ来对上下游来做解耦合。 举例:当A系统对B系统进行消息通讯,如A系统发布一条系统公告,B系统可以订阅该频道进行系统公告同步,整个过程中A系统并不关系B系统会不会同步,由订阅该频道的系统自行处理。 什么是RocketMQ? 官方说明: 随着使用越来越多的队列和虚拟主题,ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流,断路器或降级来解决此问题,但效果不佳。因此,我们那时开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。 看到这里可以很清楚的知道RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。 具有以下特性: 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型 能够保证严格的消息顺序,在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 提供丰富的消息拉取模式,支持拉(pull)和推(push)两种消息模式 单一队列百万消息的堆积能力,亿级消息堆积能力 支持多种消息协议,如 JMS、MQTT 等 分布式高可用的部署架构,满足至少一次消息传递语义 RocketMQ环境安装 下载地址: https://rocketmq.apache.org/dowloading/releases/

Kafka、RabbitMQ、RocketMQ、ActiveMQ

心已入冬 提交于 2019-12-15 05:27:06
一、资料文档 Kafka:中。有kafka作者自己写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书,网上的资料多是一些代码的实现和简单介绍。rocketmq:少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述。activemq:多。没有专门写activemq的书,网上资料多。 二、开发语言 Kafka:Scala rabbitmq:Erlang zeromq:c rocketmq:java activemq:java 三、支持的协议 Kafka:自己定义的一套…(基于TCP) rabbitmq:AMQP zeromq:TCP、UDP rocketmq:自己定义的一套… activemq:OpenWire、STOMP、REST、XMPP、AMQP 四、消息存储 Kafka:内存、磁盘、数据库。支持大量堆积。 kafka的最小存储单元是分区,一个topic包含多个分区,kafka创建主题时,这些分区会被分配在多个服务器上,通常一个broker一台服务器。分区首领会均匀地分布在不同的服务器上,分区副本也会均匀的分布在不同的服务器上,确保负载均衡和高可用性,当新的broker加入集群的时候,部分副本会被移动到新的broker上。根据配置文件中的目录清单

RocketMQ最佳实践

江枫思渺然 提交于 2019-12-12 18:31:13
1、RocketMQ简单介绍 RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分构成,如下图所示 所有的集群都具有水平扩展能力,无单点障碍。 NameServer以轻量级的方式提供服务发现和路由功能,每个NameServer存有全量的路由信息,提供对等的读写服务,支持快速扩缩容。 Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型,具备多副本容错机制(2副本或3副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严格保证消息的有序性。除此之外,Broker还提供了同城异地容灾能力,丰富的Metrics统计以及告警机制。这些都是传统消息系统无法比拟的。 Producer由用户进行分布式部署,消息由Producer通过多种负载均衡模式发送到Broker集群,发送低延时,支持快速失败。 Consumer也由用户部署,支持PUSH和PULL两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制,满足大多数消费场景。 2、RocketMQ中的专业术语 Topic topic表示消息的第一级类型,比如一个电商系统的消息可以分为:交易消息、物流消息...... 一条消息必须有一个Topic。 Tag Tag表示消息的第二级类型,比如交易消息又可以分为:交易创建消息,交易完成消息.....

你需要知道的RoketMQ

白昼怎懂夜的黑 提交于 2019-12-12 17:03:55
1.概述 本篇文章会尽力全面的介绍RocketMQ和Kafka各个关键点的比较,希望大家读完能有所收获。 RocketMQ前身叫做MetaQ, 在MeataQ发布3.0版本的时候改名为RocketMQ,其本质上的设计思路和Kafka类似,但是和Kafka不同的是其使用Java进行开发,由于在国内的Java受众群体远远多于Scala,所以RocketMQ是很多以Java语言为主的公司的首选。同样的RocketMQ和Kafka都是Apache基金会中的顶级项目,他们社区的活跃度都非常高,项目更新迭代也非常快。 2.入门实例 2.1 生产者 public class Producer { public static void main(String[] args) throws MQClientException, InterruptedException { DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName"); producer.start(); for (int i = 0; i < 128; i++) try { { Message msg = new Message("TopicTest", "TagA", "OrderID188", "Hello world".getBytes

分布式延时消息

北战南征 提交于 2019-12-11 23:28:23
背景 开源版的RocketMQ只提供了18个层级的消息队列延时,这个功能在开源版中显得特别鸡肋,但是在阿里云中的RocketMQ却提供了支持40天之内任意秒级延时队列,果然有些功能你只能充钱才能拥有。当然你或许想换一个开源的消息队列,在开源社区中消息队列延时消息很多都没有被支持比如:RabbitMQ,Kafka等,都只能通过一些特殊方法才能完成延时的功能。为什么这么多都没有实现这个功能呢?是因为技术难度比较复杂吗?接下来我们分析一下如何才能实现一个延时消息。 RocketMQ消息产生后,生产者希望在间隔一段时间后被消费的场景可以使用定时消息,RocketMQ目前不支持自定义延迟时间,但可以指定延迟等级,可以选择18个延迟等级,分别是对应延迟时间是1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h。 RocketMQ的延迟消息主题是SCHEDULE_TOPIC_XXXX,18个延迟级别对应18个消息队列,当消息投递到broker后,如果消息中指定了延迟等级(DelayTimeLevel),消息topic会更改为SCHEDULE_TOPIC_XXXX,queueId更改为延迟等级对应的消息队列,原有的topic和queueId会放到msg属性的REAL_TOPIC与REAL_QID中。 本地延时

RocketMQ NameServer深入剖析

风格不统一 提交于 2019-12-10 22:37:04
本文将深入剖析rocketmq为什么选择自己开发NameServer,而不是选择类似于ZK这样的开源组件。同时对rocketmq的路由注册、路由发现、路由剔除进行剖析。并通过结合核心源码,对笔者的观点进行验证。同时对不同类型消息的重试机制,以及客户端选择nameserver的策略进行深入讲解。 文章第一部分是name server在rocketmq整体架构中的作用,熟悉的同学可以直接跳过。 1 NameServer的作用 Name Server 是专为 RocketMQ 设计的轻量级名称服务,具有简单、可集群横吐扩展、无状态,节点之间互不通信等特点。整个Rocketmq集群的工作原理如下图所示: 可以看到,Broker集群、Producer集群、Consumer集群都需要与NameServer集群进行通信: Broker集群 Broker用于接收生产者发送消息,或者消费者消费消息的请求。一个Broker集群由多组Master/Slave组成,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave。每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报。 Producer集群 消息的生产者,通过NameServer集群获得Topic的路由信息,包括Topic下面有哪些Queue

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他

早过忘川 提交于 2019-12-09 12:21:58
1.背景 上篇文章介绍了 RocketMQ整体架构和原理 有兴趣的可以阅读一下,在这篇文章中的延时消息部分,我写道开源版的RocketMQ只提供了18个层级的消息队列延时,这个功能在开源版中显得特别鸡肋,但是在阿里云中的RocketMQ却提供了支持40天之内任意秒级延时队列,果然有些功能你只能充钱才能拥有。当然你或许想换一个开源的消息队列,在开源社区中消息队列延时消息很多都没有被支持比如:RabbitMQ,Kafka等,都只能通过一些特殊方法才能完成延时的功能。为什么这么多都没有实现这个功能呢?是因为技术难度比较复杂吗?接下来我们分析一下如何才能实现一个延时消息。 2.本地延时 在实现分布式消息队列的延时消息之前,我们想想我们平时是如何在自己的应用程序上实现一些延时功能的?在Java中可以通过下面的方式来完成我们延时功能: ScheduledThreadPoolExecutor:ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,我们提交任务的时候,会将任务首先提交到DelayedWorkQueue一个优先级队列中,按照过期时间进行排序,这个优先级队列也就是我们堆结构,每次提交任务排序的复杂度是O(logN)。然后取任务的时候就会从堆顶取出我们的任务,也就是我们延迟时间最小的任务

RocketMQ环境搭建

与世无争的帅哥 提交于 2019-12-07 13:34:37
在上篇 《消息队列选型》 中我们通过对目前比较流行的各个MQ产品的对比,结合公司具体业务需求,选择了RocketMQ做为我们的消息中间件,这篇分享我们介绍一下RocketMQ的安装配置。 1 、初步理解 Producer/Consumer Group 在安装RocketMQ之前我们先来理解Group概念,在RocketMQ中Group是很重要的。通过Group机制,让RocketMQ天然的支持消息负载均衡!比如某个Topic有9条消息,其中一个Consumer Group有3个实例(3个进程 OR 3台机器),那么每个实例将均摊3条消息!(注意RocketMQ只有一种模式,即发布订阅模式。)如下图所示: 2 、 RocketMQ 的集群部署模式: 在动手操作之前我们先来了解一下RocketMQ的集群部署模式都有哪些。RocketMQ在众多消息队列产品中高可用性是其亮点之一,其集群部署方式有很多种。比如单Master模式、多Master模式、多Master多Slave模式(异步复制)、多Master多Slave模式(同步双写)等。明确个概念,RocketMQ Slave不可以写,可以读,类似于MySQL的主从机制。 单Master 模式: 无需多言,一旦单个broker重启或宕机,一切都结束了!很显然,线上不可以使用。 多Master 模式: 全是Master,没有Slave。当然

docker安装部署rocketmq单机

随声附和 提交于 2019-12-07 13:33:37
首先去这里下载https://github.com/apache/rocketmq-externals 帮助文档在这https://github.com/apache/rocketmq-externals/tree/master/rocketmq-docker 官方文档已经很清晰的教给怎么用docker部署了 先创建目录/home/data/rocketmq,broker.conf还有docker-compose.yml放在该目录下 ps 这一步可以跳过,可以用docker-compose.yml直接下载镜像 拉下来代码后 进入/home/rocketmq-externals-master/rocketmq-docker/image-build 执行 sh build-image.sh RMQ-4.3.0 这里是RMQ-版本 然后返回上一级 执行 sh stage.sh 4.3.0 后边这个是版本,这个命令会在stage目录下生成4.3.0/templates两个目录 进入 /home/rocketmq-externals-master/rocketmq-docker/stages/4.3.0/templates 单节点的话执行./play-docker.sh 命令 集群部署 官方文档也给了说明 这个命令会下载相关镜像 接下来我们来编写docker-rocketmq-compose

使用docker部署rocketmq时的坑

落爺英雄遲暮 提交于 2019-12-07 13:33:01
阿里云1000元通用代金券点此领取 官方docker项目地址: https://github.com/apache/incubator-rocketmq-externals 里面有rocketmq的docker运行文档 如果同时需要docker运行console需要注意一个问题 下面是官方文档中运行console的命令,里面的JAVA_OPTS参数是不正确的,不知道是不是版本原因 docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng 按照这个命令运行的话会报错 connect to <null> failed , 如图 对比直接在服务器上运行的命令,把其中java_opts改为如下 docker run -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=127.0.0.1:9876 -D" -p 8080:8080 -t styletang/rocketmq-console-ng 再次运行,没有报错。 下面是我启动namesrv,broker,console用的docker