一、介绍
RocketMQ是由阿里捐赠给Apache的一款分布式、队列模型的开源消息中间件
特性:
1、具有灵活的可扩展性.RocketMQ天然支持集群,其核心四大组件(NameServer,Broker,Producer,Consumer)的每一个都可以在没有单点故障的情况下进行水平扩展
2、具有海量消息堆积能力.RocketMQ采用零拷贝原理实现了超大量消息的堆积能力,据说单机已经支持亿级消息堆积,而且在堆积了这么多消息后保持写入低延迟
3、支持顺序消息.RocketMq可以保持消息消费者按照消息的发送顺序对消息进行消费.顺序消息分为全局有序消息和局部有序消息,一般推荐使用局部有序消息,即生产者通过将某一类消息按照顺序发送至同一队列中来实现
4、支持多种消息过滤方式.消息过滤分为在服务器端过滤和在消费端过滤.在服务器端过滤时可以按照消息消费者的要求进行过滤,优点是减少不必要的消息传输,缺点是增加了消息服务器的负担,实现相对复杂.消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会被传输给消息消费者.
5、支持事务消息.RocketMQ除支持普通消息,顺序消息外,还支持事务消息,这个特性对于分布式事务来说提供了另一种解决思路
6、支持回溯消费.回溯消费指的是消费者已经消费成功的消息,由于业务需求需要重新消费.RocketMQ支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯.
二、应用场景
削峰填谷:
秒杀、抢红包、企业开门红等大型活动时皆会带来较高的流量脉冲,或因没做相应的保护而导致系统超负荷甚至崩溃,或因限制太过导致请求大量失败而影响用户体验,削峰填谷是解决该问题的最佳方式;
超高流量脉冲处理能力
MQ 超高性能的消息处理能力可以承接流量脉冲而不被击垮,在确保系统可用性同时,因快速有效的请求响应而提升用户的体验;
分布式事务消息
三、消息中间件对比
四、应用
java中应用
1、导入依赖 <dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.6.1</version>
</dependency>
2、创建生产者
创建同步消息生产者
public class MQTest {
public static void main(String[] args) throws Exception{
//发送消息步骤
//1、创建消息生产者producer(DefaultMQProducer),并指定生产者group
DefaultMQProducer producer = new DefaultMQProducer("test-group");
//2、指定Nameserver地址
producer.setNamesrvAddr("127.0.0.1:9876");
//3、启动producer
producer.start();
//4、创建Message对象,指定主体topic、消息体
Message message = new Message("test-topic","test0tag","你好,MQ".getBytes());
//5、发送消息【同步消息:阻塞线程】
SendResult send = producer.send(message);
System.out.println(send);
//6、关闭生产者producer
producer.shutdown();
}
}
创建异步消息生产者
public class MQTest2 {
public static