利用sping-cloud feign进行远程调用?

导读:本篇文章讲解 利用sping-cloud feign进行远程调用?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.简介
远程调用
RMI远程调用的主要原理是一台机上的JVM中的类或者方法需要调用另外一台机上JVM中的类或者方法.这两台机可以是跨平台的.你的SSH架构系统中,地址栏中输入URL访问,只是你在访问服务器上的JEE容器中的业务(JEE容器中执行的JAVA程序也是在JVM中运行),当你的SSH系统中的业务逻辑需要调用其他的另外一台机的EJB业务系统时(可能你现在时为了某项业务),调用纯粹是为了使用对方的相关业务处理,而你只是需要返回结果数据,那么这时候远程调用就可以做到了,RMI就是你调用了对方JEE容器里的某项服务(对方的JEE容器里的业务执行是对方机器上的JVM),这不就是跨了不同机器上的JVM进行相关的JAVA调用了吗。希望这段话对你有用。
2.为什么要进行远程调用?
假设我们有两个项目A和B,例如:商品服务和会员服务,当某一用户成功购买商品后,我们除了要将商品信息加入其订单详情中,还需要将用户购买商品后的积分同时加入其会员服务的相关表中,此时,如果我们从商品服务中是无法访问会员服务中相关业务逻辑代码的,此时,我们就需要进行远程调用,来获取我们需要的信息或在会员服务中向相关表保存相关信息.
3.利用sping-cloud feign怎么做?
3.1在需要远程调用的项目中均引入spring cloud相关依赖以及注册中心(这里使用nacos)等相关依赖,如下:

<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.在配置文件中指定自己的配置中心地址以及命名空间名臣(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.在商品服务和会员服务的启动类上都添加注册发现注解@EnableDiscoveryClient
4.在商品服务中新建feign包,创建一个接口,如下:

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}
     *
     */

此时,我们即可在商品服务中调用会员服务中相关业务逻辑代码!
笔者刚开始运营公众号啦,感兴趣的可关注我的公众号,欢迎交流!
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96848.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!