马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
微服务间怎么找到彼此?注册中心负责这件事。Eureka 是一个基于 SpringBoot 的 Java 程序:解压 eureka-server 的 jar 就是标准 Java 目录结构,外加一些前端页面用的 static 文件。它和 Nacos 思路接近,差别在于 Eureka 默认把实例信息放在 eureka-server 的内存里,适合开发测试,生产建议配数据库做持久化。
一、起一个独立的 Eureka-Server 模块
做成父-子结构的 Maven 工程。Eureka-Server 这层只要引入一个核心依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
再加一个启动类、配好路径端口,服务就能起来:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
二、业务模块作为 Eureka-Client
各业务模块都是客户端,核心依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
并在模块里配置服务端地址。启动 eureka-server 与 user-service 后,访问 http://127.0.0.1:10086 就能在面板上看到服务已注册。
三、服务调用链路
订单服务 A 调用户服务 B:A 先从 Eureka-server 拿 B 的地址,再用 RestTemplate 的 getForObject() 发 HTTP 请求过去,把响应封装成指定对象。用大白话说,Eureka 就是那本「说明书」——A 按说明书找到 B 在哪。
四、加负载均衡
生产环境一个服务不可能只有一个实例,更多是一服务多实例。注册中心返回的是实例列表,调用方再从中挑一个落请求,这就实现了高可用与横向扩展。开启只需在服务调用方加一个注解:
@Bean
@LoadBalanced // 负载均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
RestTemplate 内部继承了一个做请求转发(负载均衡)的拦截器,@LoadBalanced 的职责就是把它打开。
五、怎么验证落到哪个实例
加个 aop 依赖,注入 Eureka client,把负载均衡分发的实例打印到控制台:
@Aspect
@Component
@Slf4j
public class RequestAspect {
@Resource
EurekaClient eurekaClient;
@Before(value = "execution(* com.yu7.user.web.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getName();
log.debug("调用方法:{}", className + "." + methodName);
InstanceInfo instanceInfo = eurekaClient.getApplicationInfoManager().getInfo();
log.debug("负载均衡到的实例信息为:{}", instanceInfo.getInstanceId());
}
}
再次发起请求,看控制台输出落在哪个端口的实例上,负载均衡就生效了。
六、一点选型体会
Dubbo + Redis、Dubbo + Zookeeper、SpringCloud + Eureka、SpringCloud + Nacos,每种组合各有适用场景。流行的不一定是适合自己的,做技术选型时手里能摆出几套方案、说清各自代价,比追一个「最热」更值钱。
qidao123.com企服评测-应用市场 编辑提示 |