当前位置:   article > 正文

RocketMQ生产者Producer启动时是否需要指定TOPIC_rocketmq 必须要topic吗

rocketmq 必须要topic吗

       Producer启动是和Name Server建立连接不需要指定TOPIC,Producer发送消息需要和Broker(master)建立连接需要指定TOPIC。关于这个结论我们可以从Producer的使用和连接机制着手理解,理论结合实际嘛。

启动代码和消息发送代码

  1. /*1.producer的配置 init-start方法在实例化对象的时候执行,通过配置文件我们可以直观的发现“Producer启动时不需要指定TOPIC”
  2. *
  3. **/
  4. <bean id="producer" class="com.mlycan.dbus.rmq.producer.RocketMQProducerImpl"
  5. lazy-init="true" init-method="start" destroy-method="shutdown">
  6. <constructor-arg value="mq_group_default_clustering" index="0"></constructor-arg>
  7. <property name="namesrvAddr" value="127.0.0.1:9876"/>
  8. <property name="retryTimesWhenSendFailed" value="3"/>
  9. </bean>
  10. /*2.producer发送消息,发送消息也是producer和broker建立长连接的触发机制*/
  11. //2.1消息指定topic和tag
  12. Message msg = new Message(topic,tag,msgKey,
  13. JSON.toJSONString(messageData).getBytes(Charset.forName("utf-8")));
  14. //设置延迟消息级别
  15. // messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
  16. msg.setDelayTimeLevel(4);
  17. //发送消息
  18. SendResult sresult = producer.sendMessage(msg);

Producer连接机制:
      首先Producer随机和Name Server中的一个节点建立长链接,并与提供Topic服务的Master任意一个broker建立长连接,然后每隔30s获取所有Topic队列的最新状况,而Broker每隔10s扫描所有存活的连接,2分钟内没收到心跳数据,则关闭与Producer的连接。这意味着,如果Broker不可用,Producer在30s后需要从Topic队列中重新获取一个Broker并建立长连接,如果Producer与Broker之间的连接断开,Producer则需要重新建立连接。
从Proucer的连接机制我总结出以下观点:
1.Poducer不需要时刻与Name Server或者Broker保持长连接;长连接的建立是为了减少重复连接造成的资源消耗,但是长时间保持空连接同样会带来资源浪费,因此Producer的长连接是指在使用频率高的期间里保持长连接。换句话说Producer的重复连接是RocketMQ可以接受的,而且并不影响系统使用。
2.Producer和Name Server建立连接时不需要指明Topic:Producer和Name Server建立连接后才能获取提供Topic服务的Broker信息。
3.Producer在发送消息的时候才需要和Broker建立长连接
4.Producer建立和Broker连接时需要指明Topic:Producer长连接需要和提供Topic服务的Broker建立。Producer发送消息只发送到master的broker机器,在通过broker的主从复制机制拷贝到broker的slave上去。
        关于Producer的连接机制可以参考一下https://www.jianshu.com/p/e313e59e5c83和https://www.jianshu.com/p/e5cfb4ba925e感觉写的很详细了。
总结:
理论知识很多,但是没有实际问题的碾压,知道的越多疑惑也就也越多。记这个点主要是项目中遇到这么一个问题,系统中有多个Topic主题,但是呢为了避免重复写多个Producer,就希望通过公共Producer实现。这里有个乌龙事件就是我一直把Producer的group记成了Topic,所以就有了需要启动多个Producer的问题。通过重新对Producer连接机制的梳理,Producer的Topic风波总算是告一段落。
 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号