服务发现Discovery-Eureka—SpringCloud(H版)微服务学习教程(12)

Java技术 潘老师 3年前 (2021-03-24) 1324 ℃ (0) 扫码查看

一、什么是服务发现

简单来说:服务发现有三个角色,服务提供者、服务消费者和服务中介。服务中介是联系服务提供者和服务消费者的桥梁。

服务提供者将自己提供的服务地址注册到服务中介,服务消费者从服务中介那里查找自己想要的服务地址,然后使用这个服务。

服务中介提供多个服务,每个服务对应多个服务提供者。服务中介就是一个字典,字典里有很多key-value键值对,key是服务名称,value是服务提供者的地址列表。服务注册就是调用字典的put方法放东西,服务查找就是调用字典的get方法获取东西。当服务提供者新加入时,要求服务中介能及时告知服务消费者。

二、服务发现实现

对于注册进euerka里面的微服务,可以通过服务发现来获得该服务的信息。

基于之前的项目,我们以cloud-provider-payment8001为例进行修改实现:
1)修改8001的PaymentController,添加springframework包下的DiscoveryClient注解注入:

@Resource
private DiscoveryClient discoveryClient;

再添加一个Get请求方法:

@GetMapping(value = "/payment/discovery")
public Object discovery(){
    //  获取所有服务
    List<String> services = discoveryClient.getServices();
    //  遍历服务
    for (String service : services) {
        System.out.println("service: " + service);
    }

    // 获取服务ID为CLOUD-PAYMENT-SERVICE中的所有实例
    List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    // 遍历实例
    for(ServiceInstance instance: instances){
        System.out.println(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort()
                + "\t" + instance.getUri() + "\t");
    }
    return this.discoveryClient;
}

2)修改主启动类,在主启动类PaymentMain8001上加上@EnableDiscoveryClient注解:

package com.panziye.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

3)测试
先启动7001、7002、7003服务注册中心,再启动8001、8002和80模块,然后访问http://localhost:8001/payment/discovery测试:
服务发现Discovery-Eureka—SpringCloud(H版)微服务学习教程(12)
查看IDEA后台日志打印:
服务发现Discovery-Eureka—SpringCloud(H版)微服务学习教程(12)
通过日志我们可以清楚地看到Eureka注册中心中所有的微服务实例的信息,因此服务发现可以帮助我们获得相关服务的信息。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/2691.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】