rocketmq

SpringBoot整合RocketMQ实例(整理三 消费者)

匿名 (未验证) 提交于 2019-12-03 00:03:02
MsgConsumer .java import javax . annotation . PostConstruct ; import org . apache . rocketmq . client . consumer . DefaultMQPushConsumer ; import org . apache . rocketmq . client . consumer . listener . ConsumeConcurrentlyStatus ; import org . apache . rocketmq . client . consumer . listener . MessageListenerConcurrently ; import org . apache . rocketmq . common . consumer . ConsumeFromWhere ; import org . apache . rocketmq . common . message . MessageExt ; import org . apache . rocketmq . remoting . common . RemotingHelper ; @Component public class MsgConsumer { //消费者的组名 @Value ( "${apache

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 /

4、RocketMQ源码-Broker启动向NameServer注册、发送心跳

匿名 (未验证) 提交于 2019-12-03 00:02:01
1、Broker启动向NameServer注册 在BrokerStartup类的main方法运行的时候,创建了BrokerController,然后调用了BrokerController的start方法,在该方法中有如下代码 // 启动的时候向每个NameServer发起注册 this.registerBrokerAll(true, false, true); this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { try { // Broker会每隔30s向NameSrv注册并更新自身topic信息 BrokerController.this.registerBrokerAll(true, false, brokerConfig.isForceRegister()); } catch (Throwable e) { log.error("registerBrokerAll Exception", e); } } }, 1000 * 10, Math.max(10000, Math.min(brokerConfig.getRegisterNameServerPeriod(), 60000)), TimeUnit.MILLISECONDS);

关于消息队列的优缺点,看这篇就行

匿名 (未验证) 提交于 2019-12-02 23:57:01
在项目中为什么要使用消息队列 消息队列使用场景主要有三个: 解耦,异步,削峰 1、解耦 如上图所示,可能存在某一个系统产生关键数据,所有系统都需要其进行提供数据,导致A系统与要提供数据系统产生耦合,系统拓展,其他系统的需求修改都会导致A系统产生修改。 2、异步 如果用户一个点击,需要几个系统间的一系列反应,同时每一个系统肯都存在一定的耗时,那么可以使用mq对不同的系统进行发送命令,进行异步操作。 3、削峰 主要是如果存在用户使用的高峰期,例如存在大量的请求访问数据库(mysql每秒2000个请求),超过就会卡死,我们使用MQ作为类似于缓冲区的作用,高峰取时在MQ中进行大量请求积压,处理器按照自己的最大处理能力取请求量,等请求期过后再把它消耗掉。 消息队列有什么缺点 1、系统的可用性降低:很多服务都依赖于MQ,一旦MQ故障,系统崩溃。 2、系统变的复杂,序列考虑问题变多:发送消息重复,多了,乱序,丢掉。 3.、一致性问题:系统A给BCD发送,只有都成功才返回成功,结果BC成功,但是D失败,但是返回页面结果是成功。 每一个MQ都有什么异同和适用场景 ActiveMQ 最早大家都用ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃,单机吞吐量,万级,吞吐量比RocketMQ和Kafka要低了一个数量级,响应为ms级别,有较低的概率丢失数据。

中间件系列ActiveMQ,Rocketmq,Rabbitmq,Kafka,Mycat让你深入理解学习中间件

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

系统学习消息队列分享(五) 如何利用事务消息实现分布式事务?

匿名 (未验证) 提交于 2019-12-02 23:56:01
一说起事务,你可能自然会联想到数据库。的确,我们日常使用事务的场景,绝大部分都是在操作数据库的时候。像 MySQL、Oracle 这些主流的关系型数据库,也都提供了完整的事务实现。那消息队列为什么也需要事务呢? 其实很多场景下,我们“发消息”这个过程,目的往往是通知另外一个系统或者模块去更新数据,消息队列中的“事务”,主要解决的是消息生产者和消息消费者的数据一致性问题。 依然拿我们熟悉的电商来举个例子。一般来说,用户在电商 APP 上购物时,先把商品加到购物车里,然后几件商品一起下单,最后支付,完成购物流程,就可以愉快地等待收货了。 这个过程中有一个需要用到消息队列的步骤,订单系统创建订单后,发消息给购物车系统,将已下单的商品从购物车中删除。因为从购物车删除已下单商品这个步骤,并不是用户下单支付这个主要流程中必需的步骤,使用消息队列来异步清理购物车是更加合理的设计。 对于订单系统来说,它创建订单的过程中实际上执行了 2 个步骤的操作: 在订单库中插入一条订单数据,创建订单; 发消息给消息队列,消息的内容就是刚刚创建的订单。 购物车系统订阅相应的主题,接收订单创建的消息,然后清理购物车,在购物车中删除订单中的商品。 在分布式系统中,上面提到的这些步骤,任何一个步骤都有可能失败,如果不做任何处理,那就有可能出现订单数据与购物车数据不一致的情况,比如说: 创建了订单,没有清理购物车;

消息队列最简单的入门教程

匿名 (未验证) 提交于 2019-12-02 23:55:01
消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候 将串行化的功能变成并行化,从而提升系统性能,缩短响应时间 常用于于秒杀、发送短信通知等,需要立即返回结果 在高并发的情况,为了避免大师的请求冲击后端服务,可以使用消息队列暂存请求,后端服务按照自己的重能力,从队列中消费,例如秒杀、埋点场景。 这样可以随时增加服务的实例数量水平扩容,而不用对系统的其他部分做修改 例如一个下单的信息需要同步多个子系统,每个子系统都需要保存订单的数据的一部分,如果光靠订单服务的团队去维护所有的子系统数据同步,代价太大 解决方法是,通过发布订阅模型,订单服务在订单变化 时发送一条消息到一个主题中,所有的下游子系统都订单主题,这样可以每个子系统都可以获得一份完整的订单数据 即使是增加、减少子系统,也不会对订单服务造成任务电话号 同步消息改成了异步,增加了系统的调用链,增加了系统的复杂度 降低了数据一致性,如果要保持一致性,需要高代价的补偿(如分布式事务、对账) 引入了消息队列带来的延迟问题 RabbitMQ https://www.rabbitmq.com/ 优点:轻量,迅捷,容易部署和使用,拥有灵活的路由配置 缺点:性能和吞吐量较差

四款消息队列的对比

匿名 (未验证) 提交于 2019-12-02 23:49:02
ActiveMQ和RabbitMQ的区别? 关于文章没多少内容,请进链接:https://blog.csdn.net/qq_30764991/article/details/80573352, https://blog.csdn.net/qq_30764991/article/details/80516961好多学习内容,请自行学习。关于赞赏码倒是挺大的,哈哈,这个你得感谢中国伟大的企业家教育家马云先生(JACK MA),这个是自愿的,你自己从支付宝那里赚取,你看或者不看它就在那里,且行且珍惜短暂的人生路。加油!every body!everyone!everystudent! 1. ActiveMQ/ApolloMQ   优点:老牌的消息队列,使用Java语言编写。对JMS支持最好,采用多线程并发,资源消耗比较大。如果你的主语言是Java,可以重点考虑。   缺点:由于历史悠久,历史包袱较多,版本更新很缓慢。集群模式需要依赖Zookeeper实现。最新架构的产品被命名为Apollo,号称下一代ActiveMQ,目前案例较少。 2. RocketMQ/Kafka   优点:专为海量消息传递打造,主张使用拉模式,天然的集群、HA、负载均衡支持。话说还是那句话,适合不适合看你有没有那么大的量。   缺点:所谓鱼和熊掌不可兼得,放弃了一些消息中间件的灵活性,使用的场景较窄

rocketMQ(一)基础环境

匿名 (未验证) 提交于 2019-12-02 23:49:02
一、安装: http://rocketmq.apache.org/dowloading/releases/ https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip 启动 /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ 1. 3 . 2 启动消患队列服务 启动单 机的消息队列服务比较简单,不需要写配置文件,只需要依次启动 本机的NameSe rver 和B roker 即可 。 启动NameServer: > nohup sh bin/mqnamesrv & > tail - f ~/Logs / rocketmqLogs / namesrv . Log The Name Server boot success . .. 启动B roke r : > nohup sh bin/mqbroker n localhost : 9876& > tail -f ~ / Logs/rocketmqLogs/broker . Log The broker[%s, 192.168.0.233 : 10911] boot success .. . 1.3.3 用命令行发送和接收消息 为了快速展示发送和接收消息,本节展示的是

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 .