首页 > 其他分享 >从0开始搭建一个微服务项目(使用openfeign)

从0开始搭建一个微服务项目(使用openfeign)

时间:2023-05-05 14:58:13浏览次数:57  
标签:Feign openfeign Spring 服务项目 import com cloud 搭建

本文发布时间:2023-05-05

尚在学习当中,如有不足,请指正!!!

项目结构

本篇文章是之前项目的后续版本,前面的内容可看

链接:从0开始搭建一个微服务项(并注册到nacos)_bgbgking的博客-CSDN博客

因本篇内容较前篇跨幅较大,有兴趣可查看源码

链接:spring-cloud-demo: spring cloud基础架构及其组件的基本使用 (gitee.com)

正文

本篇主要介绍远程调用组件----openfeign的使用

首先肯定要介绍openfeign

官网介绍:

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same used by default in Spring Web. Spring Cloud integrates Eureka, Spring Cloud CircuitBreaker, as well as Spring Cloud LoadBalancer to provide a load-balanced http client when using Feign.

中文意思:

Feign是一个声明式web服务客户端。它使编写web服务客户端更容易。要使用Feign,请创建一个接口并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并支持使用Spring Web中默认使用的注释。Spring Cloud集成了Eureka、Spring Cloud CircuitBreaker以及Spring Cloud LoadBalancer,在使用Feign时提供负载均衡的http客户端。

简单理解(个人拙见):

openfeign可以在代码中向另一个微服务接口发送请求并获得结果,然后再对结果进行封装等操作。

举例:小明想要送一颗糖给他妈妈,但是他没有糖也不会制作糖,而镇上的张三会做糖,他就叫家里的机器人去张三那帮他买糖。(举例很呆但还是要举)

小明-->当前微服务

机器人-->openfeign客户端

张三-->其他微服务

要理解为什么要使用远程调用

正正文

在当前微服务中引入依赖

demo项目中cloud-order里的service模块中需要进行远程调用,因此,在cloud-order-service的pom.xml文件中添加依赖

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

注意,我父工程引入了spring-cloud-dependencies,对其依赖版本进行了管理

创建openfeign客户端

import com.ailj.feign.result.Goods;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * name: nacos中注册的远程服务名称
 * path: 远程调用controller类上的@RequestMapping中的内容
 */
@FeignClient(name = "goods-api",path = "/goods")
public interface GoodFeignServer {

    @GetMapping("/{goodId}")
    //@PathVariable中必须指定参数的值!!
    //因为在自身的controller类中,springmvc会将路径变量和参数绑定
    //但是feign会将方法中的参数转为http请求的参数,并将其拼接在url后或放到请求体中
    //@PathVariable参数name和value是等效的
    Goods getById(@PathVariable("goodId") Long goodId);

}

注意:openfeign需要搭配服务发现客户端使用!!!本项目使用nacos(小明总得知道张三家地址吧)

调用服务

import com.ailj.feign.result.Goods;
import com.ailj.feign.server.GoodFeignServer;
import com.ailj.mapper.OrderMapper;
import com.ailj.model.dto.OrderDetail;
import com.ailj.model.po.Order;
import com.ailj.service.OrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;


@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {

    @Resource
    OrderMapper orderMapper;

    @Resource
    GoodFeignServer goodFeignServer;

    @Override
    public OrderDetail getByUserId(Long userId) {
        Order order = orderMapper.getByUserId(userId);
        OrderDetail orderDetail = new OrderDetail();
        orderDetail.setOrder(order);
        Long goodId = order.getGoodId();
        //远程调用
        Goods goods = goodFeignServer.getById(goodId);
        //将返回的结果封装
        orderDetail.setGoodName(goods.getName());
        return orderDetail;
    }
}

就可以用了?

nonono

还需要在当前微服务的启动类开启@EnableFeignClients注解(小明总得能用这机器人吧)

因为在cloud-order模块下,只有cloud-order-api模块中有启动类,所以

@EnableFeignClients
@SpringBootApplication
public class OrderApplication {

完毕!

po-->Order类

@Data
@ApiModel(value="Order对象")
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    @ApiModelProperty(value = "用户id")
    private Long userId;

    @ApiModelProperty(value = "商品id")
    private Long goodId;

    @ApiModelProperty(value = "金额")
    private BigDecimal amount;

}

dto-->OrderDetail类

@Data
public class OrderDetail implements Serializable {

    private static final long serialVersionUID = 8551092480256481422L;

    private Order order;
    private String goodName;

}

启动cloud-goods和cloud-order

成功!!!

最后浅浅解释下po、dto、vo(别的不会)

PO(Persistant Object)持久对象:映射数据库表的对象(数据库里啥样就啥样)

DTO(Data Transfer Object)数据传输对象:业务层中po对象中的字段不够用,还需要加入其他字段然后再进行封装处理成的对象(数据库里没这个表,又嫌po字段少)

如:

VO(Value Object)值对象:展现给页面层的对象

如:

还是它,但是概念不同

over

更深层的内容就请自行挖掘了

多动手,多思考

标签:Feign,openfeign,Spring,服务项目,import,com,cloud,搭建
From: https://www.cnblogs.com/ailj/p/17374099.html

相关文章

  • Vue3搭建脚手架
    一、安装Vue3脚手架在此之前需要把Node.js环境安装好如果之前安装了2.0的脚手架,需要把它卸载掉,在控制台执行npmuninstallvue-cli-g进行全局卸载然后执行命令npminstall@vue/cli-g下载vue3的脚手架二、项目搭建1、创建一个新的文件夹,然后使用VSCode或者命令控制台打......
  • 前端开发环境搭建--vue
    1、安装node.jshttp://nodejs.cn/download检查是否安装成功node-v使用如下语句解决npm速度慢的问题npminstall--registry=https://registry.npm.taobao.org2、安装vue-clinpminstallvue-cli-g检查是否安装成功:vuelist3、安装webpacknpminstallwebpack-g4、......
  • vue搭建脚手架出现:无法加载文件 D:\SoftWare\NodeJS\node_global\vue.ps1
    一、前言用VsCode搭建Vue3脚手架时,提示“无法加载文件D:\SoftWare\NodeJS\node_global\vue.ps1”文件 二、解决方法以管理员身份打开VSCode编辑器首先执行get-ExecutionPolicy查看执行策略然后执行set-ExecutionPolicyRemoteSigned把策略模式改为RemoteSigned更改执行......
  • umi +react 搭建项目细节记录
    配置请求域名,有umirc.ts文件可以直接在该文件加proxy:{  '/api':{ //检测域名后面带/api/的路径   target:'http://192.168.0.90', //要请求的域名或IP地址   'changeOrigin':true,   //'pathRewrite':{'^/api':''......
  • JavaSE【1】-环境搭建
    JavaSE【1】-环境搭建一、Java开发环境的搭建所谓的Java开发环境的搭建,其实就是构建出一套可以编译和执行Java应用程序的软件工具;在Java开发环境的搭建中需要安装JDK的软件工具(Java开发工具包);1.1、搭建的步骤1、下载JDK安装包(要求是不低于1.7的版本);2、安装JDK软件(非C盘即可......
  • Linux搭建JDK环境
    一、上传linux版本的JDK包至服务器本次实验上传的linux目录为/usr/local/develop/JDK。二、解压JDK压缩包tar-zvxfjdk-8u351-linux-x64.tar.gz解压后详情如下三、配置JDK环境变量3.1、打开profile文件,配置jdk的环境变量sudovi/etc/profile3.2、在文件尾......
  • 搭建局域网
    要搭建一个局域网,您需要执行以下步骤:购买或获取路由器:这是连接计算机和网络的主要设备。连接路由器:将您的计算机和其他设备连接到路由器上。使用网线连接路由器和个人电脑,或者通过Wi-Fi连接无线设备。配置路由器:输入路由器的管理员用户名和密码,并根据需要进行设置。分......
  • WordPress 个人博客搭建指南
    搭建WordPress个人网站购买一台阿里云的云服务器在服务器上安装宝塔面板宝塔面板:登录-宝塔面板(bt.cn)左侧选择安装宝塔,查看安装代码,也可以直接在线一键快速安装宝塔安装LNMP套餐:LNMP是一种服务器环境,指的是使用Linux、Nginx、MySQL和PHP这四种软件作为......
  • 直播app开发搭建,图形和短信验证码的自动识别获取
    直播app开发搭建,图形和短信验证码的自动识别获取selenuim操作 driver=webdriver.Chrome()driver.get("https://locvps.wenjingnetwork.com/page.aspx?c=reg")driver.implicitly_wait(10)#设置超时时间driver.find_element_by_name("uname").send_keys()driver.find_element_by......
  • CentOS7下搭建LVS_DR集群
    环境:CentOS7.92009  nginx1.20.11.利用ipvsadm添加虚拟服务VIP:192.168.137.200:82 -s:负载均衡算法采用加权轮询-p:持久化时间20s2.在虚拟服务中添加真实服务地址 RIP:192.168.137.13:82  192.168.137.14:82-r:添加真实服务器地址-g:DR模式-w:设置权重 ......