spring-cloud(2)、注册中心 — Eureka
今天说Spring-Cloud里面的重要组件——注册中心,也就是Eureka。注册中心Euraka分服务端和客户端,其主要的目的是保存并监控各个微服务,当客户端需要调用服务实例时,服务实例的来源是从注册中心获取的,这点上像Dubbo。下面就分别来说搭建注册中心服务端,和客户端的使用。
- 注册中心服务端
首先,新建Module(registe-center),修改POM文件(父项目cloud-demo会在简介中写出来)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud-demo</artifactId> <groupId>com.fzhsh.cloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.fzhsh.cloud</groupId> <artifactId>registe-center</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project>
然后,增加在src/main/resources目录下application.yml,并在文件中设置应用名称和Eureka的配置(注意,如果不配置会出现异常)
server: port: 8888 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
接着,编写启动代码
package com.fzhsh.cloud.registe; @SpringBootApplication @EnableEurekaServer public class RegisteApp { public static void main(String[] args) { new SpringApplicationBuilder(RegisteApp.class).web(true).run(args); } }
最后,访问http://localhost:8888/,显示页面则启动成功
- 注册中心客户端
注册中心的客户端分两个部分,一个是向注册中心注册一个服务,另一个系统则是从注册中心获取已注册的服务的信息
向注册中心注册服务
首先,新建一个Module(server),修改POM文件内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud-demo</artifactId> <groupId>com.fzhsh.cloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.fzhsh.cloud</groupId> <artifactId>server</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> </project>
然后,同样在src/main/resources目录下增加application.yml,配置注册中心地址和应用名称,如下
server: port: 8000 eureka: client: service-url: defaultZone: http://localhost:8888/eureka/ spring: application: name: server
最后,编写启动代码,使用@EnableEurekaClient将服务暴露给注册中心
package com.fzhsh.cloud.server; @SpringBootApplication @EnableEurekaClient @RestController public class ServerApp { @RequestMapping("/home") public String hello(){ return "test"; } public static void main(String[] args) { SpringApplication.run(ServerApp.class, args); } }
向注册中心获取服务信息
首先,也新建Module(client),修改POM内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud-demo</artifactId> <groupId>com.fzhsh.cloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.fzhsh.cloud</groupId> <artifactId>client</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> </project>
然后,同样在src/main/resources下面增加application.yml,配置注册中心地址和应用名称
server: port: 8080 eureka: client: service-url: defaultZone: http://localhost:8888/eureka/ spring: application: name: client
最后,编写获取信息接口代码
package com.fzhsh.cloud.clent; @SpringBootApplication @EnableDiscoveryClient @RestController public class ClientApp { @Autowired private DiscoveryClient discoveryClient; @GetMapping("/show") public String getUrl(){ List<ServiceInstance> list = discoveryClient.getInstances("server"); if(list != null && !list.isEmpty()) { return list.get(0).getUri().toString(); } return "no service info"; } public static void main(String[] args) { SpringApplication.run(ClientApp.class, args); } }
- 最后测试
按照顺序先后启动registe-center、server、client项目,然后访问http://localhost:8080/show,查看结果
http://sea-PC1606065:8000
- 参考资料
http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#_spring_cloud_netflix

浙公网安备 33010602011771号