RocketMQ-消息发送(一)、消息生产者启动流程

RocketMQ 支持 3种消息发送方式 :同步(sync)、 异步(async)、单向( oneway )。
同步:发送者向 MQ 执行发送消息 API 时,同步等待,直到消息服务器返回发送结果。
异步:发送者向 MQ 执行发送消息 API 时,指定消息发送成功后的回掉函数,然后调 用消息发送 API 后,立即返回,消息发送者线程不阻塞 ,直到运行结束,消息发送成功或失败的回调任务在一个新的线程中执行
单向:消息发送者向 MQ 执行发送消息API时,直接返回,不等待消息服务器的结果,也不注册回调函数,简单地说,就是只管发,不在乎消息是否成功存储在消息服务器上。

消息生产者的启动流程:
消息生产者的启动方法在DefaultMQProducerlmpl的start方法来跟踪:
1、检查 productGroup 是否符合要求;并改变生产者的 instanceName 为进程 ID

	this.checkConfig();
	if(!this.defaultMQProducer.getProducerGroup().
	equals(MixAll.CLIENT_INNER_PRODUCER_GROUP)){
		this.defaultMQProducer.changeInstanceNameToPID();
	}

2、创建MQClientInstance实例。整个JVM实例中只存在一个 MQClientManager实 例,维护 MQClientlnstance 缓存表 ConcurrentMap<String/clientld/, MQClientinstance> factoryTable =new ConcurrentHashMap<String,MQClinetInstance>(),也就是同一个clientId只会创建一个MQClientInstance。

publicMQClientInstancegetAndCreateMQClientInstance(finalClientConfigclientConfig,RPCHookrpcHook){
		StringclientId=clientConfig.buildMQClientId();
		MQClientInstanceinstance=this.factoryTable.get(clientId);
		if(null==instance){
			instance=
			newMQClientInstance(clientConfig.cloneClientConfig(),
			this.factoryIndexGenerator.getAndIncrement(),clientId,rpcHook);
			MQClientInstanceprev=this.factoryTable.putIfAbsent(clientId,instance);
			if(prev!=null){
				instance=prev;
				log.warn("ReturnedPreviousMQClientInstanceforclientId:[{}]",clientId);
			}else{
				log.info("CreatednewMQClientInstanceforclientId:[{}]",clientId);
			}
		}
		
		returninstance;
	}

3、向 MQClientlnstance 注册,将当前生产者加入到 MQClientlnstance 管理中,方 便后续调用网络请求、进行心跳检测等

	Boolean registerOK = mQClientFactory.registerProducer
	(this.defaultMQProducer.getProducerGroup(),this);
	if(!registerOK){
		this.serviceState = ServiceState.CREATE_JUST;
		throw new MQClientException
		("The producer group["+this.defaultMQProducer.getProducerGroup()
		+"]has been created before,specify another name please."+FAQUrl.suggestTodo(FAQUrl.GROUP_NAME_DUPLICATE_URL),
		null);
	}

4、启动 MQClientlnstance ,如果 MQClientlnstance已经启动 ,则本次启动不会真正执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值