1. Preparación ambiental
Seguimos utilizando el entorno de clúster de Eureka en "Eureka Use of SpringCloud".
1. En primer lugar, aquí tengo el proyecto pom spring-cloud-parent
2. Para el subproyecto Spring-cloud-eureka-server Eureka Server, comenzamos con 90 para este puerto.
Nuestro clúster aquí está compuesto por dos instancias de servicio, el puerto 9090 y el puerto 9091
3.spring-cloud-user-service-consumer user service (es decir, nuestro consumidor de servicios). Aquí usamos el puerto 80 comenzando
4.Spring-cloud-order-service-provider order para proporcionar servicio (proveedor de servicios) Aquí usamos el número de puerto 70
Nuestro proveedor de servicios de pedidos también consta de dos instancias, 7070 y 7071
2. Spring-cloud-eureka-server
Nuestro proyecto principal spring-cloud-parent y el servicio Eureka Server spring-cloud-eureka-server no necesitan moverse y luego iniciar Eureka Server en el puerto 9090 y el puerto 9091 respectivamente.
3. Servicio de pedidos (proveedor de servicios)
3.1 aplicación.yml
Aquí usamos la función de perfil de perfiles de springboot para dividir el servicio del proveedor de pedidos spring-cloud-order-service-provider en diferentes puertos
spring:
application:
name: spring-cloud-order-service-provider
---
spring:
profiles: p1
eureka:
client:
service-url:
defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
fetch-registry: true
register-with-eureka: true
instance:
prefer-ip-address: true # 使用ip注册
#自定义实例显示格式,添加版本号
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
port: 7070
---
spring:
profiles: p2
eureka:
client:
service-url:
defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
fetch-registry: true
register-with-eureka: true
instance:
prefer-ip-address: true # 使用ip注册
#自定义实例显示格式,添加版本号
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
port: 7071
Y configura la idea para empezar
3.2 controlador
Modificar el controlador para devolver el puerto del servicio actual, lo que nos ayudará a observar
@RestController
@RequestMapping("/order/data")
public class OrderStatisticServiceController {
@Value("${server.port}")
private Integer port;
/**
* 根据用户id获取今日完单数
* @param id 用户ID
* @return 完单数
*/
@GetMapping("/getTodayFinishOrderNum/{id}")
public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
return port;
}
}
3.3 Inicio
Inicie los servicios del proveedor de servicios de pedido 7070 y 7071 respectivamente, podemos ver que los dos proveedores de servicios están registrados en Eureka Server.
4. Servicio de usuario (llamante de servicio)
Servicio de llamadas de pedidos: spring-cloud-user-service-consumer: 8080
4.1 RestTemplateConfiguration
Necesitamos agregar la anotación @LoadBalanced al método de inyectar RestTemplate en la clase de configuración RestTemplate
@Configuration
public class RestTemplateConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
Está bien, no es necesario que agreguemos dependencias de Ribbon aquí, porque el paquete Eureka Client nos ayuda a introducir dependencias relacionadas con Ribbon.
4.2 controlador
Aquí solo necesitamos escribir el nombre del servicio al que se llamará en la URL de llamada, y luego Ribbon nos ayudará a encontrar la llamada de servicio adecuada en la lista de servicios.
@RestController
@RequestMapping("/user/data")
public class UserCenterController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getTodayStatistic/{id}")
public Integer getTodayStatistic(@PathVariable("id") Integer id){
String url ="http://spring-cloud-order-service-provider/order/data/getTodayFinishOrderNum/"+id;
return restTemplate.getForObject(url, Integer.class);
}
}
4.3 Iniciar prueba
Llamamos dos veces y devolvimos 7071 y 7070 respectivamente, lo que indica que nuestra cinta está funcionando.
4.4 Ajustar la estrategia de equilibrio de carga
Nuestra estrategia de equilibrio de carga predeterminada es: ZoneAvoidanceRule: estrategia de compensación de zona. Luego podemos usar otras estrategias de equilibrio de carga a través de la configuración, por ejemplo, usamos estrategias aleatorias:
Colocado en application.yml
Esto es para el servicio spring-cloud-order-service-provider.
spring-cloud-order-service-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Fuente: blogger de CSDN "$ code out of the future"
Enlace original: https://blog.csdn.net/yuanshangshenghuo/java/article/details/106975354