Rocketmq-Topic
来源:互联网 发布:淘宝四钻店铺转让 编辑:程序博客网 时间:2024/04/30 11:21
在Producer创建成功之后,就可以用该实例来发消息了。但肯定消息不是凭空来的,所以我们要发消息之前肯定要去创建一个消息对象。在Message就为RocketMq的消息对象,我们所有
Message msg = new Message(// topic, tags, keys, ("Hello RocketMQ " + i).getBytes()); SendResult sendResult = producer.send(msg);
一般一条消息主要有四个属性Topic,tags,key,msgBody。
Topic
消息主题,一个Producer实例只能对于一个topic,一条消息也必须属于一个topic。
tags
消息标签,可用来做服务端消息过滤。一个topic下可以有很多tags,一般都通过topic+tags来消费自己想要的结果。
keys
消息关键词,查询消息使用。
msgBody
消息体,所需要发的内容。
消息创建成功,就可以调用send()
方法发送消息。 topic为消息必不可少的元素,下面我们来看看Topic从无到有的一个过程。
通过创建Message设置topic,调用
producer.send(Message)
DefaultMQProducerImpl.sendDefaultImpl
接受到message对象时,会对topic进行第一次校验.先从当前实例中查找是否有该topic,
this.topicPublishInfoTable.get(topic)
.如果没有则通过NameService查找topic
this.mQClientFactory.updateTopicRouteInfoFromNameServer(topic)
MQClientInstance去NameServer查找路由信息.如果找不到就会在在该方法中创建一个topic的路由信息.
topicRouteData=this.mQClientAPIImpl.getDefaultTopicRouteInfoFromNameServer(defaultMQProducer.getCreateTopicKey(), 1000 * 3);if (topicRouteData != null) { for (QueueData data : topicRouteData.getQueueDatas()) { int queueNums=Math.min(defaultMQProducer.getDefaultTopicQueueNums(), data.getReadQueueNums()); data.setReadQueueNums(queueNums); data.setWriteQueueNums(queueNums); } }
topic路由信息主要包括broker的信息,队列的个数等信息.Math.min()里主要就是计算topic队列选择其中较小者为新建Topic队列数.所以在创建producer里和配置文件中设置的对topic设置的队列数并不能直接定义一个topic的队列数.后面再正真创建topic的时候还会在比较一次队列的数.
系统从NameServer获取topic信息的模板就是MixAll.DEFAULT_TOPIC,与之对应保存路径是\用户\store\config\topic.json文件.如果在topic文件中没有相对应的DEFAULT_TOPIC会出现路由信息出错的异常.- 构建好topic就跟随msg一起发送到broker端.SendMessageProcessor接受到请求会对msg进行第一次检查
super.msgCheck(ctx, requestHeader, response);
broker端从自己维护this.brokerController.getTopicConfigManager().selectTopicConfig(requestHeader.getTopic());
去查看传入topic是否存在,不存则调用TopicConfigManager.createTopicInSendMessageMethod
去创建. - createTopicInSendMessageMethod()方法中又进行了一次队列比较,为客户端传过来的队列数与topic自身默认队列数比较,还是取其最小.构建好TopicConfig对象放入
topicConfigTable
中. topicConfigTable
中包涵了所有topic的信息.通过调用抽象父类ConfigManager.persist()
的方法进行保存.保存的形式备份之前的文件,把最新文件先当成临时文件保存,然后删除备份之前文件,临时文件改为正式文件.
- Rocketmq-Topic
- rocketmq问题汇总-一个consumerGroup只对应一个topic
- 解决RocketMQ报No route info of this topic:异常
- topic
- RocketMQ——从NameServer更新客户端订阅的topic路由信息
- Kafka vs RocketMQ—— Topic数量对单机性能的影响-转自阿里中间件
- Kafka vs RocketMQ——多Topic对性能稳定性的影响-转自阿里中间件
- 技术文章 | 从 Apache RocketMQ 和 Kafka 看 Topic 数量对单机性能的影响
- 从 Apache RocketMQ 和 Kafka 看 Topic 数量对单机性能的影响
- 从 Apache RocketMQ 和 Kafka 看 Topic 数量对单机性能的影响
- RocketMQ特性、专业术语(Producer,Producer Group,Consumer Group,Topic,Message,Tag,Broker,Name Server)等
- RocketMQ
- Rocketmq
- RocketMQ
- RocketMQ
- RocketMQ
- RocketMQ
- rocketmq
- a
- U盘存储问题
- tolua 学习笔记 资源加载、数据读取
- aa
- 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
- Rocketmq-Topic
- node-request()
- RecyclerView学习demo
- 写在微信小程序上线之夜,我想对移动开发人员说别慌先玩玩AR压压惊!
- mybatis将所有的异常全部包成了运行时异常
- 开发者,别被小程序“坑”了
- Python itertools 模块
- 【C语言】编写一个函数返回参数二进制中1的个数。
- 前端AJax的实现