SpringCloud(3)Eureka服务集群搭建以及服务发现

1.添加本地域名映射

打开host文件,路径如下:
在这里插入图片描述
添加以下配置,然后保存

#eureka ip

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

2.新建第二个eureka服务模块,并修改两个eureka服务的yml配置文件

导入的依赖跟第一个eureka服务模块的相同,修改两个模块的yml配置文件,让他们的服务地址互相改为对方的地址,形成互相注册,互相守望的效果,并且修改hostname为刚才设置的本地域名。

7001端口的服务yml配置如下:

server:
  port: 7001

eureka:
  #eureka服务的实例名称
  instance:
    hostname: eureka7001.com
  client:
    #不将自己注册进eureka
    register-with-eureka: false
    #指示此客户端是否应从eureka服务器获取eureka注册表信息,自己就是注册中心所以关闭
    fetch-registry: false
    service-url:
      #设置与eureka服务交互的查询和注册服务的地址
      defaultZone: http://eureka7002.com:7002/eureka/

7002端口的服务yml配置如下:

server:
  port: 7002
eureka:
  #eureka服务的实例名称
  instance:
    hostname: eureka7002.com
  client:
    #不将自己注册进eureka
    register-with-eureka: false
    #指示此客户端是否应从eureka服务器获取eureka注册表信息,自己就是注册中心所以关闭
    fetch-registry: false
    service-url:
      #设置与eureka服务交互的查询和注册服务的地址
      defaultZone: http://eureka7001.com:7001/eureka/

3.打开两个eureka监控页面查看

7001端口的:
在这里插入图片描述
7002端口的:
在这里插入图片描述
每个服务出现另一个服务的域名,则代表集群搭建成功

4.配置提供者集群

复制一份provider模块,把端口设置为8012,如下图所示:
在这里插入图片描述
修改两个提供者项目的控制器,使其显示端口,便于分辨调用的哪一个提供者的服务:
在这里插入图片描述

5.添加提供者和消费者客户端到集群

修改payment提供者服务和order消费者服务的yml配置,将eureka服务地址改为两个server的地址。
两个都改为:

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka

然后要先开启eureka服务集群,注册中心如下所示:
在这里插入图片描述

6.使用消费者进行测试

首先需要注意,目前配置了提供者集群,所以需要开启restTemplate的负载均衡功能,才能自动选择一个提供者服务进行调用,开启负载均衡,需要使用@loadBalanced注解

@Configuration
public class ApplicationContextConfig {
    
    

    //注册restTemplate进容器
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
    
    
        return new RestTemplate();
    }
}

将restTemplate的请求地址改为注册中心中的提供者服务的名称CLOUD-PAYMENT-SERVICE
在这里插入图片描述
然后启动消费者模块,进行测试,第一次访问是8011端口的
在这里插入图片描述
第二次访问是8012端口的
在这里插入图片描述

7.修改提供者客户端实例名称和显示其ip地址

在两个提供者模块下的yml配置文件中,加入以下配置,另一个实例id为payment8012

eureka:
  instance:
    instance-id: payment8011
    #访问路径显示ip
    prefer-ip-address: true

配置完成后,重新启动项目,打开eureka服务中心,可以看到已经显示的是设置的实例id,同时出现了ip地址。
在这里插入图片描述

8.使用服务发现

首先需要在主启动类上加入@EnableDiscoveryClient注解

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class CloudProviderPayment8011Application {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(CloudProviderPayment8011Application.class, args);
    }

}

然后写一个控制器方法进行测试,使用discoveryClient进行操作。

@Autowired
DiscoveryClient discoveryClient;

@GetMapping("/discovery")
    public Object discovery(){
    
    

        //显示所有服务
        List<String> services = discoveryClient.getServices();
        for (String service : services) {
    
    
            log.info(service);
        }
        //通过服务id发现服务
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
    
    
            log.info("host:{},port:{},uri:{}",instance.getHost(),instance.getPort(),instance.getUri());
        }
        return this.discoveryClient;
    }

访问对应路径后,控制台输出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41120971/article/details/107889090