¿Utiliza sping-cloud fingir para hacer llamadas remotas?

1. Introducción El principio principal de
la invocación remota
RMI es que las clases o métodos en la JVM en una máquina necesitan llamar a las clases o métodos en la JVM en la otra máquina. Las dos máquinas pueden ser multiplataforma. Su SSH arquitectura del sistema En, ingrese la URL en la barra de direcciones para acceder, pero está accediendo a la empresa en el contenedor JEE en el servidor (el programa JAVA ejecutado en el contenedor JEE también se está ejecutando en la JVM), cuando la lógica de negocios en su El sistema SSH necesita llamar a otro Cuando el sistema empresarial EJB de una máquina (tal vez usted sea para un negocio determinado), la llamada es puramente para utilizar el procesamiento empresarial relacionado de la otra parte, y solo necesita devolver los datos de resultado, luego el control remoto la llamada se puede realizar en este momento, RMI es Usted llama a un determinado servicio en el contenedor JEE de la otra parte (la ejecución comercial en el contenedor JEE de la otra parte es la JVM en la máquina de la otra parte), ¿no es esta una llamada JAVA relacionada a través de la JVM en diferentes máquinas? Espero que este pasaje te sea de utilidad.
2. ¿Por qué necesitamos hacer una llamada remota?
Supongamos que tenemos dos proyectos A y B, como: servicio de productos básicos y servicio de membresía. Cuando un usuario compra con éxito un producto básico, debemos agregar la información del producto básico a los detalles del pedido, y también es necesario agregar la información de la mercancía a los detalles del pedido. Los puntos después de que el usuario compra el producto también se agregan a la tabla correspondiente de su servicio de membresía. En este momento, si no podemos acceder al código de lógica empresarial relevante en el servicio de membresía desde el servicio de producto, en este momento, necesitamos hacer una llamada remota para obtenernos La información requerida o guardar la información relevante en la tabla correspondiente en el servicio de membresía.
3. ¿Cómo usar sping-cloud fingir?
3.1 Introducir spring cloud dependencias relacionadas y registro (aquí nacos) y otras dependencias relacionadas en proyectos que necesitan ser llamados de forma remota, de la siguiente manera:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--注册中心nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

2. Especifique la dirección del centro de configuración y el nombre del espacio de nombres en el archivo de configuración (bootstrap.properties):

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=0d5d1292-bb42-4635-92af-a3d06faaa726
spring.cloud.nacos.config.group=dev 

application.yml:

cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848     

3. Agregue anotaciones de descubrimiento de registro a las clases de inicio del servicio del producto y del servicio para miembros. @EnableDiscoveryClient
4. Cree un nuevo paquete ficticio en el servicio del producto y cree una interfaz, de la siguiente manera:

import com.atguigu.common.to.SkuReductionTo;
import com.atguigu.common.to.SpuBoundTo;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/***
 * 声明式的远程调用
 */
 //远程调用的会员服务项目名称
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    
    


    /**
     * 1、CouponFeignService.saveSpuBounds(spuBoundTo);
     *      1)、@RequestBody将这个对象转为json。
     *      2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。
     *          将上一步转的json放在请求体位置,发送请求;
     *      3)、对方服务收到请求。请求体里有json数据。
     *          (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity;
     * 只要json数据模型是兼容的。双方服务无需使用同一个to
     * @param spuBoundTo
     * @return
     */
     //会员服务中心调用方法的路径
    @PostMapping("/coupon/spubounds/save")
    R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);
@PostMapping("/coupon/skufullreduction/saveinfo")
    R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
/**				还有其他方式
     *      /coupon/spubounds/save
     *   1)、让所有请求过网关;
     *          1、@FeignClient("gulimall-gateway"):给gulimall-gateway所在的机器发请求
     *          2、/api/coupon/spubounds/save
     *   2)、直接让后台指定服务处理
     *          1、@FeignClient("gulimall-gateway")
     *          2、/product/skuinfo/info/{skuId}
     *
     */

En este punto, podemos llamar al código de lógica empresarial relevante en el servicio de membresía en el servicio de productos básicos.

Supongo que te gusta

Origin blog.csdn.net/lq1759336950/article/details/114186116
Recomendado
Clasificación