|
21 | 21 | import apache.rocketmq.proxy.v1.ConsumerClientConnection;
|
22 | 22 | import apache.rocketmq.proxy.v1.ConsumerClientConnectionReply;
|
23 | 23 | import apache.rocketmq.proxy.v1.ConsumerClientConnectionRequest;
|
| 24 | +import apache.rocketmq.proxy.v1.ConsumerConnectionReply; |
| 25 | +import apache.rocketmq.proxy.v1.ConsumerConnectionRequest; |
| 26 | +import apache.rocketmq.proxy.v1.ConsumerGroupCliInfo; |
| 27 | +import apache.rocketmq.proxy.v1.ConsumerSubInfo; |
24 | 28 | import apache.rocketmq.proxy.v1.ProducerClientConnection;
|
25 | 29 | import apache.rocketmq.proxy.v1.ProducerClientConnectionReply;
|
26 | 30 | import apache.rocketmq.proxy.v1.ProducerClientConnectionRequest;
|
|
52 | 56 | import org.apache.rocketmq.common.utils.NetworkUtil;
|
53 | 57 | import org.apache.rocketmq.proxy.grpc.v2.channel.GrpcClientChannel;
|
54 | 58 | import org.apache.rocketmq.proxy.processor.channel.ChannelProtocolType;
|
| 59 | +import org.apache.rocketmq.remoting.protocol.heartbeat.SubscriptionData; |
55 | 60 | import org.slf4j.Logger;
|
56 | 61 |
|
57 | 62 | public class ProxyServiceImpl extends ProxyServiceGrpc.ProxyServiceImplBase {
|
@@ -241,4 +246,56 @@ public void relay(RelayRequest request, StreamObserver<RelayReply> responseObser
|
241 | 246 | }
|
242 | 247 | }
|
243 | 248 | }
|
| 249 | + |
| 250 | + @Override |
| 251 | + public void consumerConnection(ConsumerConnectionRequest request, |
| 252 | + StreamObserver<ConsumerConnectionReply> responseObserver) { |
| 253 | + ConsumerGroupInfo groupInfo = consumerManager.getConsumerGroupInfo(request.getGroup(), true); |
| 254 | + if (groupInfo == null) { |
| 255 | + responseObserver.onNext(ConsumerConnectionReply.newBuilder() |
| 256 | + .setStatus(Status |
| 257 | + .newBuilder() |
| 258 | + .setCode(Code.BAD_REQUEST) |
| 259 | + .setMessage("Consumer group not found: " + request.getGroup()) |
| 260 | + .build()) |
| 261 | + .build()); |
| 262 | + responseObserver.onCompleted(); |
| 263 | + return; |
| 264 | + } |
| 265 | + |
| 266 | + ConsumerGroupCliInfo.Builder consumerBuilder = ConsumerGroupCliInfo.newBuilder(); |
| 267 | + |
| 268 | + consumerBuilder |
| 269 | + .setConsumeType(groupInfo.getConsumeType().getTypeCN()) |
| 270 | + .setMessageModel(groupInfo.getMessageModel().getModeCN()) |
| 271 | + .setConsumeFromWhere(groupInfo.getConsumeFromWhere().name()); |
| 272 | + |
| 273 | + for (ClientChannelInfo info : groupInfo.getChannelInfoTable().values()) { |
| 274 | + String protocolType = ChannelProtocolType.REMOTING.name(); |
| 275 | + if (info.getChannel() instanceof GrpcClientChannel) { |
| 276 | + protocolType = ChannelProtocolType.GRPC_V2.name(); |
| 277 | + } |
| 278 | + consumerBuilder.addConnection(ConsumerClientConnection.newBuilder() |
| 279 | + .setClientId(info.getClientId()) |
| 280 | + .setProtocol(protocolType) |
| 281 | + .setAddress(NetworkUtil.socketAddress2String(info.getChannel().remoteAddress())) |
| 282 | + .setLanguage(info.getLanguage().name()) |
| 283 | + .setVersion(MQVersion.getVersionDesc(info.getVersion())) |
| 284 | + .setLastUpdateTime(info.getLastUpdateTimestamp()) |
| 285 | + .build()); |
| 286 | + } |
| 287 | + |
| 288 | + for (SubscriptionData data : groupInfo.getSubscriptionTable().values()) { |
| 289 | + consumerBuilder.addConsumerSubInfo(ConsumerSubInfo.newBuilder() |
| 290 | + .setTopic(data.getTopic()) |
| 291 | + .setSubExpression(data.getSubString()) |
| 292 | + .build()); |
| 293 | + } |
| 294 | + ConsumerConnectionReply.Builder builder = ConsumerConnectionReply.newBuilder() |
| 295 | + .setConsumerGroupCliInfo(consumerBuilder.build()); |
| 296 | + |
| 297 | + responseObserver.onNext(builder.build()); |
| 298 | + responseObserver.onCompleted(); |
| 299 | + } |
| 300 | + |
244 | 301 | }
|
0 commit comments