全部流程
注册服务中心
添加maven依赖
<!--引用注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置Eureka
因为自己是一个注册中心,也是一个微服务,自己也必须要向注册中心(自己)注册,所以要配置注册中心的地址来实现注册。
server:
port: 10086 #服务端口
spring:
application:
name: eurekaserver #eureka的服务名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka #因为自己也是一个微服务,所以自己也要向自己发送注册信息
开启Eureka
使用@EnableEurekaServer注解来开启Eureka
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
注册到服务中心
添加Maven依赖
这要加上这个依赖,SpringBoot就会自动向Eureka去注册。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置Eureka
server:
port: 10086 #服务端口
spring:
application:
name: orderservice #eureka的服务名称
eureka:
client:
service-url: #eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka #因为自己也是一个微服务,所以自己也要向自己发送注册信息
开启负载均衡
@LoadBalanced注解用于负载均衡。
在有多个相同服务名称的服务中自动作选择,来实现负载均衡。
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
服务名代替网络地址
url中:http://127.0.0.1:8081/user/xxx,改成http://userservice/user/xxx。
userservice为要访问服务的yml中配置的项目名称,这个名称也是注册到Eureka的名称。
在 Eureka 中,这种使用服务名(而非具体的 IP 地址和端口号)来构造服务间调用 URL 的方式,通常被称为“服务发现”或“客户端负载均衡”。
在 Spring Cloud 中,当使用像
RestTemplate
、Feign
等组件进行服务间调用时,可以直接使用服务名来代替具体的网络地址。这背后的机制称为 “客户端服务发现”。当
RestTemplate
或Feign
看到 URL 以服务名开始时,它们会向 Eureka 服务注册中心查询这个服务名对应的实际网络地址(即 IP 地址和端口号),然后再发起实际的网络请求。这个过程是透明的,开发者不需要手动进行服务查找和负载均衡。此外,这种方式还允许 Spring Cloud 在请求发送前,根据从 Eureka Server 获取的服务实例列表进行客户端负载均衡(通常是轮询或随机算法),从而实现了分布式系统中的负载均衡。
public Order queryOrderById(Long orderId) {
Order order = orderMapper.findById(orderId);
//String url = "http://127.0.0.1:8001/user/" + order.getUserId();用服务名替代ip地址
String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
order.setUser(user);
return order;
}