dubbo3.0支持ls、invoke指令

Dubbo 3.0以上版本不再支持ls和invoke指令,但可以通过实现TelnetHandler接口来恢复支持。本文档介绍了如何重新实现这两个指令,并在项目的META-INF/dubbo目录下创建配置文件进行指定。此外,还提到了QOS作为日常使用的替代方案,其默认端口为22222。
摘要由CSDN通过智能技术生成

dubbo2.7以下可以通过telnet:20880端口执行ls、invoke指令,升级到3.X以上版本会提示不支持ls/invoke指令。这是因为dubbo3.X移除了对ls、invoke指令的支持,将这两个指令归纳到了运维指令。如果需要20880端口重新支持这两个指令,可以重新实现TelnetHandler接口,以下记录具体操作:

1、实现ls指令的支持:

package cn.xxx.common.dubbo.telnet;

import cn.hutool.core.collection.CollUtil;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.common.utils.ReflectUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.qos.command.util.ServiceCheckUtils;
import org.apache.dubbo.remoting.Channel;
import org.apache.dubbo.remoting.telnet.TelnetHandler;
import org.apache.dubbo.remoting.telnet.support.Help;
import org.apache.dubbo.rpc.model.ApplicationModel;
import org.apache.dubbo.rpc.model.ConsumerModel;
import org.apache.dubbo.rpc.model.MethodDescriptor;
import org.apache.dubbo.rpc.model.ProviderModel;
import org.apache.dubbo.rpc.model.ServiceRepository;

/**
 * @author nuoka
 * @version 1.0.0
 * <li></li>
 * @date 2022/2/22 0:20
 **/
@Activate
@Help(parameter = "[-l] [service]", summary = "List services and methods.", detail = "List services and methods.")
public class ListTelnetHandler implements TelnetHandler {

    private static ServiceRepository serviceRepository = ApplicationModel.defaultModel()
        .getApplicationServiceRepository();

    public ListTelnetHandler() {
    }

    @Override
    public String telnet(Channel channel, String message) {
        StringBuilder buf = new StringBuilder();
        String service = null;
        boolean detail = false;
        if (message.length() > 0) {
            String[] parts = message.split("\\s+");
            String[] var7 = parts;
            int var8 = parts.length;

            for (int var9 = 0; var9 < var8; ++var9) {
                String part = var7[var9];
                if ("-l".equals(part)) {
                    detail = true;
                } else {
                    if (!StringUtils.isEmpty(service)) {
                        return "Invalid parameter " + part;
                    }

                    service = part;
                }
            }
        } else {
            service = (String) channel.getAttribute("telnet.service");
            if (StringUtils.isNotEmpty(service)) {
                buf.append("Use default service ").append(service).append(".\r\n");
            }
        }

        if (StringUtils.isEmpty(service)) {
            this.printAllServices(buf, detail);
        } else {
            this.printSpecifiedService(service, buf, detail);
            if (buf.length() == 0) {
                buf.append("No such service: ").append(service);
            }
        }

        return buf.toString();
    }

    private void printAllServices(StringBuilder buf, boolean detail) {
        this.printAllProvidedServices(buf, detail);
        this.printAllReferredServices(buf, detail);
    }

    private void printAllProvidedServices(StringBuilder buf, boolean detail) {
        List<ProviderModel> providerModels = CollUtil.newArrayList(serviceRepository.allProviderModels());
        if (!providerModels.isEmpty()) {
            buf.append("PROVIDER:\r\n");
        }

        for (Iterator var4 = providerModels.iterator(); var4.hasNext(); buf.append("\r\n")) {
            ProviderModel provider = (ProviderModel) var4.next();
            buf.append(provider.getServiceKey());
            if (detail) {
                buf.append(" -> ");
                buf.append(" published: ");
                buf.append(ServiceCheckUtils.isRegistered(provider) ? "Y" : "N");
            }
        }

    }

    private void printAllReferredServices(StringBuilder buf, boolean detail) {
        List<ConsumerMo
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值