单向
单向发送其实就是部分同步发送的实现,所不同的是单向发送在发送以后,虽然已经获取了发送结果,但是不对发送结果进行判断。而同步发送时会对发送结果进行判断,若发送失败会启用重试机制。
//发送消息获取发送结果sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, topicPublishInfo, timeout - costTime);../部分代码省略switch (communicationMode) {case ONEWAY://单向发送不做任何判断,返回空return null;case SYNC://同步发送会检查发送结果,是否开启重试机制if (sendResult.getSendStatus() != SendStatus.SEND_OK) {if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) {continue;}}../部分代码省略}
异步
异步发送采用的是异步回调模式,RemotingClient中设置了 InvokeCallback的回调。同样在该回调中也设置了重试机制与故障延迟机制,若成功则会调用SendCallback#onSuccess,失败则会调用SendCallback#onException。
同步
同步发送就是正常的请求响应模式,只不过同步发送在获取发送结果时会对发送结果的状态进行诊断,若不符合要求即启用重试机制,并且故障延迟机制开启的话也会同步使用。最大程度来保证消息的成功发送。
Request
//todo request部分暂时省略,等后续回溯的时候再补充。
