服务器概念:
Eureka支持集群部署,实现高可用。
Eureka没有提供后台的存储,所有注册的服务都被保存在内存中的注册中心。他们通过心跳保存着最新的状态。
客户端存在相同的机制,同样在内存中存储了注册表信息,这样的机制提升了 eureka的性能。使得每次请求不必经过服务器端的注册中心。
服务器中存在两大对象:
1.服务提供者。
2.服务消费者(服务调用者)。
服务提供者: 主要功能:1.向服务器注册服务。2.发送心跳给服务器。3.向服务器获取注册表信息。
当服务器注册到服务器时,会提供一些自己的信息给服务器。例如:主机,端口等
服务器调用者: 主要是用来调用和发现服务,同时自身也可能作为服务被其他人调用。
实际应用:
@EnableEurekaServer 标记该服务器是Eureka服务
配置文件application.yml
#配置服务器端口
server:
port: 8864
#声明是否将自己作为服务注册到eureka,默认为true
eureka:
client:
registerWithEureka: false
fetchRegistry: false
#编写服务提供者
1.创建一个web 项目,添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
启动类加@EnableEurekaClient 标记此项目为服务提供者
创建@RestController
#编写服务调用者
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
编写yml
spring:
application:
name: web-api
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8864/eureka/
启动类 @EnableEurekaClient 表明是服务调用者,也作为提供者
此处的调用者同样是发布到eureka的客户端,简单来说就是eureka内部调用。调用过程中可能会部署多个实例,会涉及到负载均衡,服务器查找等问题,Netflix的项目已经帮我们解决,spring Could 已经封装,只需要简单的配置,编写少量代码即可实现。
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String getStudentInfo() {
RestTemplate restTemplate = getRestTemplate();
String forObject = restTemplate.getForObject("http://localhost:9000/student/info", String.class);
System.out.println(forObject);
return forObject;
}
RestTemplate 是spring-web下面的类,专门用来调用rest服务。RestTemplate本身不具备调用分布式服务的能力,但是被@LoadBalanced注解修饰后,就可以调用了。
下面在调用者服务上加@EnableDiscoveryClient,此注解的使得服务调用类有能力去发现服务,@EnableEurekaClient中其实已经包含了@EnableDiscoveryClient
浏览器访问: http://localhost:9001/stu/info