RocketMQ
RocketMQ
A minor
本来无一物,何处惹尘埃
展开
-
【消息队列】五个问题详解消息中间件
1.消息中间件是什么消息队列,又叫做消息中间件。是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信(维基百科)。基于以上的描述(MQ是用来解决通信的问题),我们知道,MQ的几个主要特点:是一个独立运行的服务。生产者发送消息,消费者接收消费,需要先跟服务器建立连接。采用队列作为数据结构,有先进先出的特点。具有发布订阅的模型,消费者可以获取自己需要的消息。可以把MQ类比成邮局和邮差,他就是原创 2020-11-14 15:27:20 · 2557 阅读 · 1 评论 -
【RocketMQ】设计思路、架构模型
1.消息中间件的设计可以先从基本的需求开始思考基本的是要能支持消息的发送和接收,需要涉及到网络通信就一定会涉及到NIO消息中心的消息存储(持久化/非持久化)消息的序列化和反序列化是否跨语言消息的确认机制,如何避免消息重发高级功能消息的有序性是否支持事务消息消息收发的性能,对高并发大数据量的支持是否支持集群消息的可靠性存储是否支持多协议2.MQ消息存储选择从主流的几种MQ消息队列采用的存储方式来看,主要会有三种分布式KV存储,比如ActiveMQ中采用的levelD原创 2020-11-18 13:41:11 · 955 阅读 · 0 评论 -
【RocketMQ】基本使用:安装、使用、可视控制台(阿里云搭建踩坑记录)
1.安装1).下载安装包下载地址:http://rocketmq.apache.org/dowloading/releases/2). 解压unzip rocketmq-all-4.5.0-bin-release.zip2.使用2.1 启动 nameserver默认情况下,nameserver监听的是9876端口nohup sh namesrv & # 若在云服务器,那么启动时要-n加上公网IPnohup sh namesrv -n 39.105.136.112:9876原创 2020-11-18 15:23:26 · 2240 阅读 · 1 评论 -
【RocketMQ】基本使用:Java操作RocketMQ(rocketmq-client)
1.引入依赖<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.5.2</version> </dependency>2.Producerpublic class MyProducer { public原创 2020-11-18 15:39:47 · 6493 阅读 · 0 评论 -
【RocketMQ】高级使用:四个问题详解事务消息
RocketMQ和其他消息中间件最大的一个区别是支持了事务消息,这也是分布式事务里面的基于消息的最终一致性方案。1.事务消息是什么?事务消息:具有事务特性的消息,即Producer发送到broker后,该消息可以回滚或者提交(提交后Consumer才可见)。2.事务消息有什么用?RocketMQ官方示例:用户A发起订单,支付100块钱操作完成后,能得到100积分,账户服务和会员服务是两个独立的微服务模块,有各自的数据库,按照上文提及的问题可能性,将会出现这些情况:如果先扣款,再发消息,可能钱刚原创 2020-11-19 00:48:37 · 1543 阅读 · 0 评论 -
【RocketMQ】原理分析:Broker集群模式、队列分区
1.Broker集群模式(宏观)RocketMQ天生对集群的支持非常友好,天然支持高可用,它可以支持多主多从的部署架构,这也是和kafka大区别之一。那为什么要将这么多broker组织成多主多从,而不是采用一主多从然后主节点down机后再选举啊?因为。。。RocketMQ中并没有master选举功能,在RocketMQ集群中,1台机器只能要么是Master,要么是Slave,这个在初始的机器配置里面,就定死了。不会像kafka那样存在master动态选举的功能,所以通过配置多个master节点来保证r原创 2020-11-18 19:03:22 · 9733 阅读 · 3 评论 -
【RocketMQ】原理分析:消息存储机制
由于分布式消息队列对于可靠性的要求比较高,所以需要保证生产者将消息发送到broker之后,保证消息是不出现丢失的,因此消息队列就少不了对于可靠性存储的要求。从主流的几种MQ消息队列采用的存储方式来看,主要会有三种分布式KV存储,这种存储方式对于消息读写能力要求不高的情况可以使用比如ActiveMQ中采用的levelDB、Redis,文件系统存储,这种方案适合对于有高吞吐量要求的消息中间件,因为消息刷盘是一种高效率,高可靠、高性能的持久化方式,除非磁盘出现故障,否则一般是不会出现无法持久原创 2020-11-18 19:49:17 · 1727 阅读 · 0 评论 -
【RocketMQ】原理分析:Consumer消费模型、消费规则
1.RocketMQ消费模型RocketMQ提供了两种消息消费模型,一种是pull主动拉取,另一种是push被动接收。实际上 RocketMQ都是pull模式,而push只是在pull模式上做了一层封装RocketMQ是基于长轮训来实现消息的pullpull到消息以后触发业务消费者注册的call back2.消费规则当Kafka集群中存在多个主节点时,一条消息只会发送到其中一个主节点,rocketmq对于多个master节点的消息发送,会做负载均衡,使得消息可以平衡的发送到多个master节原创 2020-11-18 17:50:56 · 3506 阅读 · 1 评论 -
【RocketMQ】原理分析:Producer消息发送模式、分发规则
1.消息发送模式1.1 同步发送同步消息发送模式就是说消息发送出去后,producer会等到broker回应后才能继续发送下一个消息DefaultMQProducer producer = new DefaultMQProducer("my_producer_group");producer.send(message); // 同步发送返回的SendResult有四种状态:SEND OK(成功),FLUSH_DISK_TIMEOUT(刷盘超时),FLUSH_SLAVE_TIMEOUT(同步超时原创 2020-11-18 17:38:52 · 2590 阅读 · 0 评论 -
【RocketMQ】消息可靠性保证
在实际使用RocketMQ的时候我们并不能保证每次发送的消息都刚好能被消费者一次性正常消费成功, 可能会存在需要多次消费才能成功或者一直消费失败的情况,Broker该如何处理呢?1.消息消费端的确认机制RocketMQ提供了ack机制(默认是手动ack),以保证消息能够被正常消费。为了保证消息肯定消费成功,只有使用方明确表示消费成功,RocketMQ才会认为消息消费成功,然后删除消息。中途断电,抛出异常等都不会认为成功DefaultMQPushConsumer consumer = new Defau原创 2020-11-18 19:27:25 · 2568 阅读 · 0 评论