1、JMS概述:Java Message Service规范,规定不同Java客户端之间如何进行消息传输
2、JMS消息传输模型:P2P(点对点)和Pub/Sub(发布订阅)
(1)P2P模型
组成:消息队列(Queue)、发送者(Sender)、接收者(Receiver)
特征:每个消息只有一个消费者,一旦被消费,即从消息队列中删除,如果希望每个消息都被成功处理,则应该使用P2P模型
(2)Pub/Sub模型
组成:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
特征:如果希望发送的消息可以不做任何处理,或者被一个或多个消费者消费,则应该采用Pub/Sub模型
3、Rocketmq架构
Rocketmq使用了Pub/Sub模型设计实现
Rocketmq设计时参考了kafka,消息可靠性比后者更好
4、Rocketmq启动
进入bin目录
cmd运行 mqnamesrv -n 127.0.0.1:9876 启动nameserver服务
cmd运行 mqbroker -n 127.0.0.1:9876 启动broker服务
5、Rocketmq基本概念
(1)Topic:消息逻辑管理单位
一个Producer可以生产多个Topic
一个Consumer可以订阅多个Topic
(2)Tag:用于消息细分,一个Topic下可以有多个Tag
(3)MessageQueue:消息物理管理单位,一个Topic可以对应多个Queue,默认情况下一个Topic分配4个队列,Producer生产的消息随机?发送到队列中
(4)NameServer:相当于ZooKeeper的作用
---- NameServer用来保存活跃的 broker 列表,包括 Master 和 Slave
---- NameServer用来保存所有 topic 和该 topic 所有队列的列表
---- NameServer用来保存所有 broker 的 Filter 列表
(5) Broker:不负责推送消息,只负责存储消息,Consumer主动从broker请求消息
Rocketmq提供了两种存储方式来保留消费记录:一种是保留在consumer所在的服务器上;另一种是保存在broker服务器上。用户还可以自己实现相应的消费进度存储接口。默认情况下,采用集群消费(CLUSTERING),会将记录保存在broker端;而采用广播消费(BROADCASTING)则会将消费记录保存在本地
(6)Message:消息对象模型,由Topic、Tag、Keys、body(byte[])构建
(7)ConsumerGroup:
(8)ProducerGroup:
6、消息过滤
7、消息可靠性
8、消费者消费两种方式
集群消费:同一个ConsumerGroup下有多个消费实例,生产的消息将被随机(轮询)方式发送到各个实例,单个实例只消费总量的一部分,默认方式
广播消费:类似ActiveMQ中的发布订阅模式,每一条消息都会发给Consume Group中的每一个消费者进行消费
8、消息顺序消费
9、消息持久化
10、消息获取方式
DefaultMQPushConsumer
DefaultMQPullConsumer
11、Rocketmq Console
12、代码实例