0%

Eureka

服务调用出现的问题

  • url硬编码问题,不用硬编码如何获取服务提供者地址信息
  • 如果有多个服务提供者(集群),消费者如何选择
  • 消费者如何得知服务提供者的健康状态

Eureka的作用

  • eureka-server:注册中心,管理微服务
  • eureka-client:客户端,分为提供者和消费者
  • 每一个客户端启动时,会把自己信息注册,每30s一次心跳续约,确认状态
  • 消费者需要时,注册中心拉取服务,负载均衡选取一个微服务,提供给远程调用

创建eureka-server服务

  • 引入eureka依赖
1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 编写启动类
1
2
3
4
5
6
7
8
9
10
11
12
13
package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
  • 编写配置文件
1
2
3
4
5
6
7
8
9
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka

服务注册

  • 引入依赖
1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 配置文件
1
2
3
4
5
6
7
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
  • 启动多个user-service实例
1
2
//配置VM options,防止端口冲突
-Dserver.port={端口号}

服务拉取

服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡

  • 修改OrderService的代码,修改访问的url路径,用服务名代替ip,端口
1
String url = "http://userservice/user/" + order.getUserId();
  • 在order-service项目的启动类中的RestTemplate添加负载均衡注解
1
2
3
4
5
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
------ THEEND ------

欢迎关注我的其它发布渠道