本文共 5742 字,大约阅读时间需要 19 分钟。
Eureka
Zk
服务注册表
服务注册
健康检查
上图是来自Eureka官方的架构图,大致描述了Eureka集群的工作过程。
由图可知,Eureka包含两个组件:Eureka Server 和 Eureka Client。
综上,Eureka通过心跳检测、健康检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
引入依赖
org.springframework.cloud spring-cloud-starter-eureka-server org.springframework.boot spring-boot-starter-security
应用入口增加EnableEurekaServer
@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}
配置文件
# 增加用户名和密码security: basic: enabled: true user: name: user password: password123server: port: 8761eureka: client: register-with-eureka: false # 单机环境设置成false fetch-registry: false # 单机环境设置成false service-url: defaultZone: http://user:password123@localhost:8761/eureka datacenter: cloud environment: product
org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-actuator
应用入口增加 @EnableEurekaClient 或者 @EnableDiscoveryClient
@SpringBootApplication@EnableEurekaClientpublic class MicroserviceSimpleProviderUserApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceSimpleProviderUserApplication.class, args); }}
配置文件
健康检查
server: port: 7900 spring: application: name: microservice-provider-user eureka: client: healthcheck: enabled: true serviceUrl: defaultZone: http://user:password123@localhost:8761/eureka instance: prefer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} metadata-map: zone: ABC # eureka可以理解的元数据 lilizhou: BBC # 不会影响客户端行为 lease-renewal-interval-in-seconds: 5 appname: microservice-provider-user
@RestControllerpublic class UserController { @Autowired private UserRepository userRepository; @GetMapping("/simple/{id}") public User findById(@PathVariable Long id) { return this.userRepository.findOne(id); } @Autowired private EurekaClient eurekaClient; @Autowired private DiscoveryClient discoveryClient; //获取服务提供的ip @GetMapping("/eureka-instance") public String serviceUrl() { InstanceInfo instance = this.eurekaClient.getNextServerFromEureka("MICROSERVICE-PROVIDER-USER", false); return instance.getHomePageUrl(); } //获取服务提供者信息 @GetMapping("/instance-info") public ServiceInstance showInfo() { ServiceInstance localServiceInstance = this.discoveryClient.getLocalServiceInstance(); return localServiceInstance; }}
使用RestTemplate消费spring boot的Restful服务
引入eureka依赖
org.springframework.cloud spring-cloud-starter-eureka
@SpringBootApplication@EnableEurekaClientpublic class ConsumerMovieRibbonApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerMovieRibbonApplication.class, args); }}
findById调用提供者提供的接口
@RestControllerpublic class MovieController { @Autowired private RestTemplate restTemplate; @GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class); }}
application.yml
spring: application: name: microservice-consumer-movie-ribbonserver: port: 8010eureka: client: healthcheck: enabled: true serviceUrl: defaultZone: http://user:password123@localhost:8761/eureka instance: prefer-ip-address: true
转载地址:http://gxonn.baihongyu.com/