spring cloud service服务端获取已注册的客户端服务

有个需求是手机上发送请求,电脑上调用打印机。前提条件是电脑上已经部署springbcloud client服务。spring cloud service 服务端部署在服务器上,手机发送请求到服务端,携带需要调用的服务的服务名。例两台客户端,一台服务名ClientA,另一台服务名ClientB,手机需要调用ClientA所在的电脑绑定的打印机。

图里是eureka-server服务端的jar包,在里面可以找到控制器和首页页面。图里是eureka-server服务端的jar包,在里面可以找到控制器和首页页面
贴上代码

@RestController
public class FindClientController {

    @RequestMapping("/findClient")
    public String findClient(){

        ArrayList<Map<String, Object>> list = populateApps();

        System.out.println(list);

        return "ok";
    }

    private EurekaServerContext getServerContext() {
        return EurekaServerContextHolder.getInstance().getServerContext();
    }


    private PeerAwareInstanceRegistry getRegistry() {
        return this.getServerContext().getRegistry();
    }

    /**
     * 获取已注册的服务
     * */
    private ArrayList<Map<String, Object>> populateApps() {
        List<Application> sortedApplications = this.getRegistry().getSortedApplications();
        ArrayList<Map<String, Object>> apps = new ArrayList<>();

        for (Application app : sortedApplications) {
            LinkedHashMap<String, Object> appData = new LinkedHashMap<>();
            apps.add(appData);
            appData.put("name", app.getName());
            Map<String, Integer> amiCounts = new HashMap<>();
            Map<InstanceInfo.InstanceStatus, List<Pair<String, String>>> instancesByStatus = new HashMap<>();
            Map<String, Integer> zoneCounts = new HashMap<>();
            Iterator var10 = app.getInstances().iterator();

            InstanceInfo.InstanceStatus status;
            while (var10.hasNext()) {
                InstanceInfo info = (InstanceInfo) var10.next();
                String id = info.getId();
                String url = info.getStatusPageUrl();
                status = info.getStatus();
                String ami = "n/a";
                String zone = "";
                if (info.getDataCenterInfo().getName() == DataCenterInfo.Name.Amazon) {
                    AmazonInfo dcInfo = (AmazonInfo) info.getDataCenterInfo();
                    ami = dcInfo.get(AmazonInfo.MetaDataKey.amiId);
                    zone = dcInfo.get(AmazonInfo.MetaDataKey.availabilityZone);
                }

                Integer count = amiCounts.get(ami);
                if (count != null) {
                    amiCounts.put(ami, count + 1);
                } else {
                    amiCounts.put(ami, 1);
                }

                count = zoneCounts.get(zone);
                if (count != null) {
                    zoneCounts.put(zone, count + 1);
                } else {
                    zoneCounts.put(zone, 1);
                }

                List<Pair<String, String>> list = instancesByStatus.computeIfAbsent(status, (k) -> new ArrayList<>());
                list.add(new Pair(id, url));
            }

            appData.put("amiCounts", amiCounts.entrySet());
            appData.put("zoneCounts", zoneCounts.entrySet());
            ArrayList<Map<String, Object>> instanceInfos = new ArrayList<>();
            appData.put("instanceInfos", instanceInfos);

            for (Map.Entry<InstanceInfo.InstanceStatus, List<Pair<String, String>>> instanceStatusListEntry : instancesByStatus.entrySet()) {
                Map.Entry<InstanceInfo.InstanceStatus, List<Pair<String, String>>> entry = instanceStatusListEntry;
                List<Pair<String, String>> value = entry.getValue();
                status = entry.getKey();
                LinkedHashMap<String, Object> instanceData = new LinkedHashMap<>();
                instanceInfos.add(instanceData);
                instanceData.put("status", entry.getKey());
                ArrayList<Map<String, Object>> instances = new ArrayList<>();
                instanceData.put("instances", instances);
                instanceData.put("isNotUp", status != InstanceInfo.InstanceStatus.UP);

                for (Pair<String, String> stringStringPair : value) {
                    LinkedHashMap<String, Object> instance = new LinkedHashMap<>();
                    instances.add(instance);
                    instance.put("id", stringStringPair.first());
                    String url = stringStringPair.second();
                    instance.put("url", url);
                    boolean isHref = url != null && url.startsWith("http");
                    instance.put("isHref", isHref);
                }
            }
        }
        return apps;
    }
}

效果图
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值