关于Eureka
Spring Cloud Eureka 是 Netfilx 套件的一部分,主要用于微服务框架中的服务治理,结合spring boot 我们可以通过简单的注解配置就能启用。如图所示:
- 服务注册中心,提供服务注册和发现的功能。
- 服务提供者,提供服务的应用,通过注册到服务注册中心来使服务被发现,以供调用。
- 服务消费者,通过服务注册中心获取可调用服务列表,进行服务调用。
搭建服务注册中心
首先创建spring boot应用,在pom文件引入依赖,在这里需要注意的时候你引入的spring cloud版本有spring boot的版本要求,我引入的版本是Greenwich.SR5,所以spring boot需要2.1.x以上的版本,我们可以再spring cloud官网找到该说明
链接: https://spring.io/projects/spring-cloud.
在pom.xml引入spring cloud的依赖,spring boot的版本是2.1.10
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
再引入Eureka Server
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在spring boot的启动类添加Eureka服务器的注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class ServerStartApplication {
public static void main(String[] args) {
SpringApplication.run(ServerStartApplication.class, args);
}
}
在默认配置下,该服务注册中心会把自己也作为客户端注册自己,所以我们需要把禁用它的客户端注册行为,在yml文件把
eureka.client.register-with-eureka改成false
eureka:
client:
#该配置表示是否需要将自己注册到注册中心上(默认为true),如果是单机部署,不需要设置为true;
#但是注册中心集群时候必须为true;因为集群时,其他Eureka需要从此Eureka中的节点上获取数据;
register-with-eureka:false
启动成功访问http://localhost:8761/就可以看到Eureka的信息面板了。Instances currently registered with Eureka这一栏展示注册到服务注册中心的Eureka应用,由于现在没有注册,所以显示是空的。
服务提供者
同样创建spring boot应用,应用名称为:spring-cloud-eureka-provide,引入相同的spring cloud依赖,再引入Eureka client的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动类加上@EnableEurekaClient注解
@SpringBootApplication
@EnableEurekaClient
public class ProvideClientApplication {
public static void main(String[] args) {
SpringApplication.run(ProvideClientApplication.class, args);
}
}
在yml配置注册中心的地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动成功我们就可以在Eureka面板看到该应用的注册
服务提供应用在注册中心注册成功之后,就可以对外提供接口,我们先建一个Controller,对外提供方法以供调用。
服务提供者提供对外的接口为test/getCode/{id}
服务调用者
服务调用应用(spring-cloud-eureka-client)也需要注册到服务注册中心,注册方式与服务提供者相同。注册成功可以在服务注册中心看到两个已经注册的应用。
现在我们可以在client应用里面去调用provide应用的方式,通过RestTemplate 的方式,调用接口为provide应用名称+接口方法。
@Autowired
RestTemplate tpl;
@RequestMapping(value="/router/{id}",method=RequestMethod.GET)
@ResponseBody
public String router(@PathVariable("id") String id) {
String json = tpl.getForObject("http://spring-cloud-eureka-provide/test/getCode/"+id, String.class);
return json;
}
完成服务调用。
项目代码可以参考:https://github.com/cwy405/springcloud
参考文献
1、Spring Cloud 微服务实战 翟永超著