本文介绍了MQ底层类MQClientInstance和ProcessQueue分析的相关知识。很多人在实际办案过程中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!
00-1010 defaultmqproducterrimpl、DefaultMQPullConsumerImpl和DefaultMQPushConsumerImpl的成员变量都包含相同的成员对象:
privateqclientinstance qclientfactory;
this . mqclientfactory=mqclientmanager . getinstance()。getAndCreateMQClientInstance(this . defaultmqpushconsumer,this . rpchook);MQClientInstance的功能如下:
MQClientInstance负责通过与NameServer通信维护心跳,并根据Topic获取Broker地址;
MQClientInstance负责与Broker通信,以发送和接收消息并重新平衡;
在正常情况下,使用火箭MQ的生产者或消费者,或者一个JVM进程只有一个MQClientInstance就足够了。如果不通过setInstanceName手动设置,此时创建的一个或多个使用者或生产者都将使用相同的MQClientInstance(默认名称为“DEFAULT”)。
但是,在某些情况下,只有一个MQClientInstance对象是不够的。例如,如果一个Java程序需要连接两个MQ集群,它将从一个集群被消费并被发送到另一个集群,但是一个MQClientInstance对象不能支持这种情况。在此时一定要手动指定不同的InstanceName,将在底部创建两个MQClientInstance对象。
publicclassMQClientManager{
privatedstatimmqclientmanagerinstance=new mqclientmanager();
private atomicintegerfactoryndexgenerator=new tomicinteger();
privateConcurrentMapString/* client id */,MQClientInstancefactoryTable=
newConcurrentHashMapString,MQClientInstance();ClientId生成规则:
如果在同一台机器上有多个带有MQ集成服务的客户端,进程ID
00-1010路径:org . Apache . rockemq . client . impl . consumer。
“MQ客户端实例和MQ底层类的进程队列分析”的内容到此结束。感谢阅读。如果你想了解更多的行业,可以关注网站。边肖将为您输出更多高质量的实用文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/85710.html