微服务深入浅出(3)-- 服务的注册和发现Eureka

现来说一些Eureka的概念:

1、服务注册 Register

就是Client向Server注册的时候提供自身元数据,比如IP和Port等信息。

2、服务续约 Renew

Client默认每隔30s发送一次心跳来服务续约,如果90s没有收到Client的心跳包,Server会将Client从注册列表中移除。

3、获取服务注册信息 Fetch Register

Eureka Client会从Eureka Server获取服务注册表信息,并将其缓存在本地。默认每30s更新一次。

4、下线 Cancel

Eureka Client在程序关闭的时候可以向Eureka Server发送下线请求立即移除注册表信息,需要手动调用代码:

5、LoadBalancer缓存

Ribbon在客户端维护了缓存定时刷新,避免每个请求都从Server获取注册信息,所以新注册的Provider可能会出现延迟。

DiscoveryManager.getInstance().shutdownComponent();

搭建Eureka Server

配置文件:

server:
  port: 9001
eureka:
  instance:
    hostname: localhost
    prefer-ip-address: true
  client:
      register-with-eureka: false
      fetch-registry: false
      service-url:
        defaultZone: http://localhost:9001/eureka/

启动类加注解@EnableEurekaServer:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

访问:http://localhost:9001/

Eureka服务注册

配置文件:

server:
  port: 9006
spring:
  application:
    name: hi-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9001/eureka/

启动类加注解@EnableEurekaClient:

@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {

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

Eureka服务发现

配置文件:

server:
  port: 9008
spring:
  application:
    name: eureka-consumer
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9001/eureka/

启动类加注解@EnableEurekaClient:

@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {

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

 

Service层访问:

@Service
public class RibbonService {
    @Autowired
    RestTemplate restTemplate;

    public String hi() {
        return restTemplate.getForObject("http://hi-service/hi", String.class);
    }
}

可以看到,url已经使用application name去代替了ip+port的信息去请求服务。如果Eureka Service provider在配置文件中没有配置serviceId,则默认为配置文件中的服务名,也就是${spring.application.name}。

创建Eureka Server服务集群

多profile格式配置文件application.yml

spring:
  application:
    name: discovery-cluster
---
spring:
  profiles: discovery1
server:
  port: 8761
eureka:
  instance:
    hostname: discovery1
  client:
    service-url:
      default-zone: http://discovery2:8762/eureka

---
spring:
  profiles: discovery2
server:
  port: 8762
eureka:
  instance:
    hostname: discovery2
  client:
    service-url:
      default-zone: http://discovery1:8761/eureka

配置文件是通过两个Eureka Server互相注册,这里有三段配置,第一段配置为公共配置,配置了应用名称,第二段为名discovery1的配置,第三段为discovery2的配置。在项目启动可以通过 
--spring.profiles.active={配置名称} 来启动不同的配置。

java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery1 
java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery2 

在client端,只需要把 eureka.client.serviceUrl.defaultZone 改成相应的集群地址即可,多个服务用逗号分隔:

eureka
    client
        serviceUrl
            defaultZone = http://discovery1:8761/eureka,http://discovery2:8761/eureka

 

 

原文地址:https://www.cnblogs.com/ijavanese/p/9145366.html