Producer
生产者是在应用程序中发送消息给broker的。 在RocketMQ中提供多种语义的消息发送:synchronous,asynchronous和one way.
Producer Group
具有相同规则的Producers被聚合在一起。一个producer在开启事务消息后,随后宕机。在同一个producer group中的不同的实例可以被broker联系在一起来提交或者回滚事务。
注意:考虑到提供的producer在发送消息上面的性能时十分足够的,一个producer group仅仅实例化一个producer就看可以了,这可以避免不必要的producer实例化。、
Consumer
Consumer可以从broker中拉取消息,并且分发到应用程序中。在使用者角度来看,RocketMQ提供2中类型的consumer.
PullConsumer
PullConsumer 主动的从broker中拉取消息。一次性批量拉取多个消息,应用程序本身来初始化消费进程。
PushConsumer
PushConsumber 从某些方面来讲师封装了消息拉取的过程,同时消息这些消息,其他还做了很多工作在里面。PushComsumber中留了一个回调接口需要用户去实现。
当消息到达时,这个回调结果将会被调用。
Consumber Group
多个完全一样的规则的Consumber 被称作Consumber Group .
在消费消息时,为了达到负载均衡和失败容错方便,Consumber Group是一个非常重要的概念。使用Consumber Group 能够很容易解决这些问题。
注意:Consumber Group 中的每一个consumber 都必须有一样的主题规则。
Topic
Topic是producer发送消息、consumber拉取消息的种类。topic与producer、consumber有非常弱的关联。一般来说、一个topic可以有零个、一个或者多个消息producer来发送消息。从消费观点来讲,一个topic可以被零个、一个或者多个consumber group定义。同理,一个consumber group 可以定义一个或者多个topic.但强调的是,一个group consumber中的每一个consumber必须有相同的订阅规则。
Message
Message 是被发送信息的一个封装。一个Message必须被指定到topic,这个topic就是Message被投递的地址。 Message可以可以有一个可选择的Tag
在Mesage中可以有额外的键值对数据。例如:在开发过程中,可以在Message中设置一个business 键,然后在broker中通过business键来暴露问题。
Message Queue
Topic,在内部被逻辑的分成多个子topic,我们称作这些子topic 叫做 Message Queue. 这个概念在fail-over,max concurrency的实现上扮演者重要的角色。
Message Tag
Tag可以被认为是一个子topic,为用户提供更多的灵活性。通过这个TAG,有着相同topic但是不同TAG的消息在相同的业务模块中有着不同的目的。
通过使用TAG,可以帮助使你的代码更加的简洁明了。
Broker
在RocketMQ系统中broker扮演者重要角色。Broker从producer那里接受消息,然后存储这些消息,然后准备这些消息被consumber拉取。
同时Broker也存储一下元数据metadata.比如:consumber group、consumber group 和消费进程offset 、topic以及message queue信息。
Name Server
NameServer 提供topic的路由信息。Producer 、Consumber 从nameserver中查询topic所在broker信息,然后从对应的broker中读写消息。
Message Model
Clustering 、 Broadcasting
Message Order
当使用DefaultMQPushConsumber时,可以决定消费消息时orderly 或者concurrently 。当选择orderly时,消息会按照在每一个Message Queue 中被发送的顺序,在消费端被消费。
如果一定要使用全局的顺序场景,那就必须确保在同一个topic上面仅仅有一个message queue.
注意:此时,consumber group 最大并发量由订阅的mesage queue 数量来决定
当指定并发消费时,最大并发数量可以在每一个consumber 客户端来设置固定线程池中线程数量来实现。
注意:此时,在concurrently 模型中消息顺序就不被确保了。、
原文链接:
RocketMQ Core Concept
http://rocketmq.apache.org/docs/core-concept/