[Grain Mall] Problemas relacionados con errores en llamadas remotas de openfeign

Este proyecto utiliza principalmente nacos como centro de registro, y openfeign completa la función de servicio de invocación remota

Para llamar al servicio remoto, primero agregue la dependencia openfeign en el módulo para llamar al servicio remoto

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

Los pasos para llamar al servicio de forma remota generalmente se dividen en los siguientes tres pasos:
Inserte la descripción de la imagen aquí
1. Escriba una función (una solicitud en el controlador) en el código del proveedor del servicio para que el consumidor del servicio pueda llamarlo. En el video, la función en el cupón es llamado por el miembro, así que agregue un método al controlador del cupón

@RequestMapping("/memberCoupon/list")
public R memberCoupon(){
    
    
    CouponEntity couponEntity = new CouponEntity();
    couponEntity.setCouponName("满十减一");
    return R.ok().put("memberCoupon",Arrays.asList(couponEntity));
}

2.1. Cree un nuevo paquete fingido en el módulo de consumidor de servicios y agregue una interfaz de solicitud, agregue @FeignClient (nombre del servicio) al encabezado de la interfaz (el nombre del servicio aquí es el nombre del servicio registrado en el registro de nacos) y luego proporcione el servicio La ruta de solicitud completa y la firma del método del usuario se copian completamente en la interfaz de servicio

package indi.zhihuali.gulimall.member.feign;

import indi.zhihuali.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author zhihua.li
 * @date 2020/11/28 - 22:04
 **/

@FeignClient("gulimall-coupon")     //表明自己是一个会调用coupon服务的Feign客户端

public interface CouponFeignService {
    
    
//    声明要调用哪个服务的哪个功能,并完整复制该方法的路径名及方法名(签名)
    @RequestMapping("/coupon/coupon/member/list")   //声明要调用远程服务的哪个方法
    public R memberCoupons();
}

3. Agregue la clase de configuración principal del consumidor de servicios para
@EnableFeignClients(basePackages = "indi.zhihuali.gulimall.member.feign")habilitar la función de llamada remota de Feign

4. Agregue un método al controlador del consumidor de servicios e inyecte la interfaz creada anteriormente, a saber, CouponFeignService, en el controlador a través de la anotación @Autowired para llamada

@Autowired
private CouponFeignService couponFeignService;

@RequestMapping("coupon/list")
public R couponlist(){
    
    

    MemberEntity memberEntity = new MemberEntity();
    memberEntity.setNickname("张三");
    R memberCoupon = couponFeignService.memberCoupon();
    return R.ok().put("member",memberEntity).
        put("memberCoupon",memberCoupon.get("memberCoupon"));
}

5. Inicie las clases de configuración principales de los dos servicios por separado para probar

Aquí el módulo miembro no se abre, el mensaje de error es:

No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

Después de buscar la razón durante mucho tiempo y probar de muchas maneras, finalmente concluyó dos soluciones

Opción uno (esta es mi propia expansión de pensamiento, una solución que se investigó a través de la falta de indicaciones de equilibrio de carga, ¡pero se recomienda usar el segundo método directamente!) Se
Did you forget to include spring-cloud-starter-loadbalancer? solicita introducir la dependencia spring-cloud-starter-loadbalancer, intente importar esto Después de la dependencia, el proyecto se ejecutó correctamente, pero después de ingresar la URL correspondiente en la barra de direcciones, se encontró que la página mostraba 500 y la consola de ideas también informó un error

I spring-cloud-starter-alibaba-nacos-discoverysustituye la cinta integrada con él spring-cloud-starter-loadbalancery lo encontré resuelto ...

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>

Opción 2: Reducir la versión de nube de primavera (una mejor solución)

https://blog.csdn.net/qq_42267491/article/details/110083758https://blog.csdn.net/qq_42267491/article/details/110083758

Después de que el grandullón dijo que la
Inserte la descripción de la imagen aquí
versión de Spring Cloud era demasiado alta, no había ningún paquete de equilibrio de carga (como supuse al principio, porque cuando se informó el error, obviamente se debió a que la función de equilibrio de carga no se introdujo correctamente)
. La solución aquí es:
elija la versión de Spring Cloud Es Hoxton.SR9, el motivo es elegir la versión Hoxton de Spring Cloud

A través del repositorio mvn: https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies

Se encuentra que la última versión de Hoxton es SR9, y se introduce la dependencia de esta versión

Modificar la versión de sc en el archivo pom del miembro Hasta
Inserte la descripción de la imagen aquí
ahora, el problema está resuelto
Inserte la descripción de la imagen aquí

Resumen de la versión adjunta:

Tome el módulo de cupón como ejemplo, otros módulos también son los mismos que
SpringCloudAlibaba en SpringBoot y
Inserte la descripción de la imagen aquí
el módulo común SpringCloud
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45729934/article/details/110310119
Recomendado
Clasificación