RocketMQ Core Concept


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/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值