mirror of
https://github.com/apache/rocketmq.git
synced 2026-09-24 16:04:00 +08:00
[ISSUE #3906] Mark stream-related request by RequestType
This commit is contained in:
@@ -28,6 +28,7 @@ import org.apache.rocketmq.common.utils.NameServerAddressUtils;
|
||||
import org.apache.rocketmq.remoting.common.RemotingUtil;
|
||||
import org.apache.rocketmq.remoting.netty.TlsSystemConfig;
|
||||
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
||||
import org.apache.rocketmq.remoting.protocol.RequestType;
|
||||
|
||||
/**
|
||||
* Client Common configuration
|
||||
@@ -65,6 +66,12 @@ public class ClientConfig {
|
||||
|
||||
private LanguageCode language = LanguageCode.JAVA;
|
||||
|
||||
/**
|
||||
* Enable stream request type will inject a RPCHook to add corresponding request type to remoting layer.
|
||||
* And it will also generate a different client id to prevent unexpected reuses of MQClientInstance.
|
||||
*/
|
||||
protected boolean enableStreamRequestType = false;
|
||||
|
||||
public String buildMQClientId() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(this.getClientIP());
|
||||
@@ -76,6 +83,11 @@ public class ClientConfig {
|
||||
sb.append(this.unitName);
|
||||
}
|
||||
|
||||
if (enableStreamRequestType) {
|
||||
sb.append("@");
|
||||
sb.append(RequestType.STREAM);
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@@ -160,6 +172,7 @@ public class ClientConfig {
|
||||
this.namespace = cc.namespace;
|
||||
this.language = cc.language;
|
||||
this.mqClientApiTimeout = cc.mqClientApiTimeout;
|
||||
this.enableStreamRequestType = cc.enableStreamRequestType;
|
||||
}
|
||||
|
||||
public ClientConfig cloneClientConfig() {
|
||||
@@ -179,6 +192,7 @@ public class ClientConfig {
|
||||
cc.namespace = namespace;
|
||||
cc.language = language;
|
||||
cc.mqClientApiTimeout = mqClientApiTimeout;
|
||||
cc.enableStreamRequestType = enableStreamRequestType;
|
||||
return cc;
|
||||
}
|
||||
|
||||
@@ -318,12 +332,21 @@ public class ClientConfig {
|
||||
this.mqClientApiTimeout = mqClientApiTimeout;
|
||||
}
|
||||
|
||||
public boolean isEnableStreamRequestType() {
|
||||
return enableStreamRequestType;
|
||||
}
|
||||
|
||||
public void setEnableStreamRequestType(boolean enableStreamRequestType) {
|
||||
this.enableStreamRequestType = enableStreamRequestType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ClientConfig [namesrvAddr=" + namesrvAddr + ", clientIP=" + clientIP + ", instanceName=" + instanceName
|
||||
+ ", clientCallbackExecutorThreads=" + clientCallbackExecutorThreads + ", pollNameServerInterval=" + pollNameServerInterval
|
||||
+ ", heartbeatBrokerInterval=" + heartbeatBrokerInterval + ", persistConsumerOffsetInterval=" + persistConsumerOffsetInterval
|
||||
+ ", pullTimeDelayMillsWhenException=" + pullTimeDelayMillsWhenException + ", unitMode=" + unitMode + ", unitName=" + unitName + ", vipChannelEnabled="
|
||||
+ vipChannelEnabled + ", useTLS=" + useTLS + ", language=" + language.name() + ", namespace=" + namespace + ", mqClientApiTimeout=" + mqClientApiTimeout + "]";
|
||||
+ vipChannelEnabled + ", useTLS=" + useTLS + ", language=" + language.name() + ", namespace=" + namespace + ", mqClientApiTimeout=" + mqClientApiTimeout
|
||||
+ ", enableStreamRequestType=" + enableStreamRequestType + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,6 +220,7 @@ public class DefaultLitePullConsumer extends ClientConfig implements LitePullCon
|
||||
public DefaultLitePullConsumer(final String namespace, final String consumerGroup, RPCHook rpcHook) {
|
||||
this.namespace = namespace;
|
||||
this.consumerGroup = consumerGroup;
|
||||
this.enableStreamRequestType = true;
|
||||
defaultLitePullConsumerImpl = new DefaultLitePullConsumerImpl(this, rpcHook);
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ public class DefaultMQPullConsumer extends ClientConfig implements MQPullConsume
|
||||
public DefaultMQPullConsumer(final String namespace, final String consumerGroup, RPCHook rpcHook) {
|
||||
this.namespace = namespace;
|
||||
this.consumerGroup = consumerGroup;
|
||||
this.enableStreamRequestType = true;
|
||||
defaultMQPullConsumerImpl = new DefaultMQPullConsumerImpl(this, rpcHook);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package org.apache.rocketmq.client.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
@@ -152,6 +153,7 @@ import org.apache.rocketmq.common.protocol.header.namesrv.WipeWritePermOfBrokerR
|
||||
import org.apache.rocketmq.common.protocol.heartbeat.HeartbeatData;
|
||||
import org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData;
|
||||
import org.apache.rocketmq.common.protocol.route.TopicRouteData;
|
||||
import org.apache.rocketmq.common.rpchook.StreamTypeRPCHook;
|
||||
import org.apache.rocketmq.common.subscription.SubscriptionGroupConfig;
|
||||
import org.apache.rocketmq.logging.InternalLogger;
|
||||
import org.apache.rocketmq.remoting.InvokeCallback;
|
||||
@@ -169,7 +171,6 @@ import org.apache.rocketmq.remoting.netty.ResponseFuture;
|
||||
import org.apache.rocketmq.remoting.protocol.LanguageCode;
|
||||
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
|
||||
import org.apache.rocketmq.remoting.protocol.RemotingSerializable;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
||||
public class MQClientAPIImpl {
|
||||
|
||||
@@ -195,6 +196,10 @@ public class MQClientAPIImpl {
|
||||
this.remotingClient = new NettyRemotingClient(nettyClientConfig, null);
|
||||
this.clientRemotingProcessor = clientRemotingProcessor;
|
||||
|
||||
// Inject stream rpc hook first to make reserve field signature
|
||||
if (clientConfig.isEnableStreamRequestType()) {
|
||||
this.remotingClient.registerRPCHook(new StreamTypeRPCHook());
|
||||
}
|
||||
this.remotingClient.registerRPCHook(rpcHook);
|
||||
this.remotingClient.registerProcessor(RequestCode.CHECK_TRANSACTION_STATE, this.clientRemotingProcessor, null);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user