赞
踩
Eureka 是 Netflix 开发的服务发现框架。Spring Cloud 将其集成在 spring-cloud-netflix 子项目中,以实现 Spring Cloud 的服务发现功能。
Eureka的主要作用如下:
服务实例启动后,将自己的信息注册到Eureka服务端,完成服务注册,Eureka服务端保存注册的服务名称到服务实例地址列表的映射关系,然后Eureka客户端根据根据服务的名称,拉取实例地址列表,完成服务发现(服务拉取)。
Eureka客户端从实例列表中利用负载均衡算法选择其中一个实例地址,然后会向该实例地址发送远程调用。
消费者每隔一段时间(默认为30秒)向Eureka服务端发起请求,报告自己的状态,即心跳。当一段时间没有发送心跳时,Eureka服务端会认为该微服务实例出现故障,将该实例节点从服务列表中剔除,在Eureka客户端拉取服务的时候就能将故障实例排除。
在Eureka微服务中引入如下依赖:
<!--eureka服务端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在Eureka服务端微服务的启动类上添加@EnableEurekaServer
注解开启Eureka:
@SpringBootApplication
@EnableEurekaServer //通过注解开启eureka表示自己是一个注册中心
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
在application.yml配置文件中配置Eureka的相关配置:
server:
port: 10086 #服务端口
spring:
application:
name: eureka-server #服务名称
eureka:
client:
service-url: #eureka注册中心地址信息,自身也是个微服务,会将自己也注册在eureka上
defaultZone: http://127.0.0.1:10086/eureka
完成上述配置后启动服务,浏览器访问服务地址,如果出现如下页面即搭建成功:
服务注册和服务拉取的相关依赖都统一封装在ereuka-client依赖下
在需要注册的微服务的pom.xml文件中引入如下依赖:
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在配置文件中添加和eureka有关的配置,添加服务名和eureka地址:
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
如果在访问Eureka服务端页面的时候该服务的名字如图红框中所示展示出来即为该微服务成功注册在Eureka上:
在需要进行服务发现的微服务的pom.xml文件中引入如下依赖:
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在配置文件中添加和eureka有关的配置,同样添加服务名和eureka地址,服务发现也需要知道eureka地址:
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
负载均衡只需要在RestTemplate上添加@LoadBalanced
注解即可实现,默认的方式为轮询
@Bean
@LoadBalanced //开启负载均衡,默认为轮询
public RestTemplate restTemplate(){
return new RestTemplate();
}
服务拉取即修改服务的访问路径,用服务名代替IP地址和端口
@Service public class OrderService { @Autowired private OrderMapper orderMapper; @Autowired private RestTemplate restTemplate; public Order queryOrderById(Long orderId) { // 1.查询订单 Order order = orderMapper.findById(orderId); // 2、利用RestTemplate发起Http请求,查询用户 //String url = "http://localhost:8080/user/" + order.getUserId(); //将上边这句替换为下边的格式,修改端口号和IP地址为服务名称 String url = "http://userservice/user/" + order.getUserId(); User user = restTemplate.getForObject(url, User.class); //3、封装User到Order order.setUser(user); // 4.返回 return order; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。