Eureka是一个注册中心,在以前的记录中,两个服务之间的调用需要使用硬编码的方式,即把ip和端口号等地址写死在程序中,使用Eureka可解决此问题,但不知能解决这个问题,还有其他的作用。
1.消费者该如何获取服务提供者的信息?
服务提供者启动时,向Eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息
2.如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中选择一个
3.消费者如何感知服务器供着健康状态?
服务提供者会每隔30s向Eureka注册中心发送心跳请求,报告健康状态
eureka会更新记录服务器列表信息,心跳不正常的进行剔除
消费者就可以拉取到最新的信息
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>3.1.1</version> </dependency>
package ptiv.sinoam.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
server: port: 9003 spring: application: name: eureka-server eureka: client: service-url: # eureka徐娅注册自己的信息 defaultZone: http://127.0.0.1:9003/eureka
发现报错Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
这是因为该项目在父级pom中引入了jdbc,springboot启动时会自动装配,这个时候发现没有配置数据库所以会报错,在main方法中添加以下代码即可:
@EnableEurekaServer @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
即可启动成功,打开页面可以看到
将demo-user注册到eureka
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.1</version> </dependency>
添加以下代码即可
eureka: client: service-url: # eureka徐娅注册自己的信息 defaultZone: http://127.0.0.1:9003/eureka
使用同样方式将demo-order注册到eureka中,启动后会看到注册的服务列表
复制一个user服务,然后通过-Dserver.port=9004修改端口
启动后发现user多了服务
在消费者中修改写死的url,用服务名代替ip和port
//调用demo-user里面的请求 // String url = "http://localhost:9001/demouser/user/test"; //用服务名进行替换 String url = "http://demo-user/demouser/user/test";
然后添加负载均衡
找到restTemplate添加注解
/** * 创建RestTemplate并注入Spring容器 * @return */ @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
重启order项目,调用接口后
不断刷新后,可以在两个user项目的日志中发现都有走,说明实现了负载均衡
1.搭建Eureka
引入server依赖
添加@EnableEurekaServer注解
在配置文件中配置eureka地址
2.服务注册
引入client注解
在配置文件中配置eureka地址
3.服务发现
引入client注解
在配置文件中配置eureka地址
在restTemplate添加@LoadBalanced实现负载均衡