eureka是springcloud Netflix下的一个组件,现已停止维护
其作用用来做服务发现与治理,可替代的产品也有很多如zookeeper,nacos
简单示意图:
eureka-client的服务都会注册到eureka server中,并且会缓存到客户端,当user-service调用order-service会根据key找到对应的服务
eureka server会通过心跳机制来检测服务是否处于可用状态
eureka提供dashboard来监控客户端服务
1、基本使用
1.1、搭建eureka server
使用父子工程来搭建项目:
eureka server工程的pom文件中引入依赖,注意版本冲突问题,这里选择的是2.2.1,springboot是2.3.1
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.2.1.RELEASE</version> </dependency>
在启动类上加上@EnableEurekaServer注解
配置文件:这里只配置了端口号和服务名
server.port=8761
spring.application.name=eureka-server-8761
启动,访问:http://localhost:8761/,进入到eureka的控制面板上,目前只有一个自己一个服务,我们再创建user-service和order-service服务。
目录结构:user-service和order-service服务都需要导入eureka-client依赖,注意版本号问题
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.1.RELEASE</version> </dependency>
user-service配置文件:
server.port=9090 spring.application.name=user-service-9090
//指定eureka服务端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
order-service配置文件:
server.port=9091 spring.application.name=order-service-9091 eureka.client.service-url.defaultZone=http://localhost:8761/eureka
启动两个服务
查看dashboard:
这样一个简单得eureka服务就搭建完成了。
1.2、服务调用
使用user-service去访问order-service服务。
user-service:创建一个UserController:
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private RestTemplate restTemplate;
@LoadBalanced
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@GetMapping("/user/{userId}")
public String getOrderByUser(@PathVariable("userId") Long userId){
return restTemplate.getForObject("http://order-service/order/list",String.class);
}
}
order-service:创建一个OrderController:
@RestController @RequestMapping("order") public class OrderController { @GetMapping("/list") public String listOrders(){ System.out.println("——————被调用了——————"); return "order-service 被调用了 " + LocalDateTime.now(); } }
测试:访问http://localhost:9090/user/user/1
页面结果
order-service 被调用了 2020-07-15T21:30:57.533
这样就完成了eureka服务调用。
注意点:
1、eureka-server的启动类上加上@EnableEurekaServer注解
2、发送restTemplate请求注意加上@LoadBalanced
3、客户端导入eureka-client,服务端导入eureka-server ,注意版本号问题
1.3、eureka结合ribbon使用
在eureka中已经整合了ribbon,所以可以直接使用ribbon的功能,ribbon的使用spring cloud (一) ——ribbon
在不使用eureka前,在ribbon中,我们在user-service中的配置
文件中加入需要访问的服务列表,例如这样:
# 配置指定服务的提供者的地址列表 orderservice.ribbon.listOfServers= localhost:8080,localhost:8081,localhost:8082
而这里我们就可以从eureka的服务中心去获取,然后缓存,所以我们无需写这一行的配置,上面的案例已经实现
了eureka和ribbon的整合,只不过order-service只启动了一个服务,如果我们启动多个order-service服务,那么@LoadBalanced
注解的作用就会很明显了。
测试:
当我们访问5次时,发现9091访问了2次,发现9092访问了2次,发现9093访问了1次
ribbon默认的负载策略是轮询策略。