前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud-Feign[入门案例]

SpringCloud-Feign[入门案例]

作者头像
用户4919348
发布2019-06-14 10:16:04
2.1K0
发布2019-06-14 10:16:04
举报
文章被收录于专栏:波波烤鸭波波烤鸭

一、 什么是 Feign

  Feign是一种声明式、模板化的HTTP客户端(仅在 consumer 中使用)。

二、 什么是声明式,有什么作用,解决什么问题?

  声明式调用就像调用本地方法一样调用远程方法;无感知远程 http 请求。

  1. Spring Cloud 的声明式调用, 可以做到使用 HTTP 请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。
  2. 它像 Dubbo 一样,consumer 直接调用接口方法调用 provider,而不需要通过常规的Http Client 构造请求再解析返回数据。
  3. 它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

三、Feign入门案例

1.设计需求

  我们模拟一个分布式电商系统中消费者通过注册中心(eureka)获取提供者提供的获取商品信息的服务的场景。

2.服务结构

在这里插入图片描述
在这里插入图片描述

组件说明

服务

说明

eureka集群

注册中心,提供服务的注册和发现

service服务

声明service接口,定义方法,provider和consumer都需要依赖此服务而且接口中的方法需要使用到SpringMVC的主键

provider服务

提供商品信息查询服务,需要依赖service服务

consumer服务

服务消费者,需要依赖service服务,同时通过feign调用provider的服务获取商品信息

3.编写service服务

3.1 创建项目

  创建一个普通的SpringBoot项目,因为要在接口中使用SpringMVC的主键,所以我们就直接创建了一个SpringBoot项目

在这里插入图片描述
在这里插入图片描述

3.2 添加依赖

  因为需要使用@RequestMapping主键,所以添加如下依赖

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

3.3 声明接口

  在接口声明服务的功能,同时在本服务中声明pojo类,就不再单独创建pojo项目了。

代码语言:javascript
复制
/**
 * @program: springcloud-feign-prodcut-service
 * @description: 商品信息的pojo类
 * @author: 波波烤鸭
 * @create: 2019-06-07 09:22
 */
public class Product {

    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Product() {
    }

    @Override
    public String toString() {
        return "Product{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public Product(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
}

服务接口

代码语言:javascript
复制
/**
 * 公共服务的接口
 */
@RequestMapping("/product")
public interface ProductService {

    /**
     * 查询所有商品的方法
     * @return
     */
    @GetMapping("/findAll")
    public List<Product> findAll();
}

最后将服务打包即可

在这里插入图片描述
在这里插入图片描述

4.编写provider服务

  provider提供商品信息的查询服务,同时需要在eureka中注册,具体实现如下:

4.1 创建项目

在这里插入图片描述
在这里插入图片描述

4.2 添加依赖

  注意需要添加service服务的依赖

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>1.4.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    <!-- 注意:需要添加 service服务的依赖 -->
    <dependency>
        <groupId>com.dpb</groupId>
        <artifactId>springcloud-feign-prodcut-service</artifactId>
        <version>1.0.1-RELEASE</version>
    </dependency>
</dependencies>

4.3 配置文件设置

  添加服务名称,端口及eureka注册中心的信息

代码语言:javascript
复制
spring.application.name=shop-product-provider
server.port=9091
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

4.4 服务实现

  控制器中实现service中的接口

代码语言:javascript
复制
/**
 * @program: springcloud-feign-product-provider
 * @description: 服务提供者的控制器
 * @author: 波波烤鸭
 * @create: 2019-06-07 09:44
 */
@RestController
public class ProductController implements ProductService{


    /**
     * 此处不用再添加@RequestMapping注解,重写的方法在接口中定义的有
     * @return
     */
    @Override
    public List<Product> findAll() {
        List<Product> list = new ArrayList<>();
        list.add(new Product(1, "电视"));
        list.add(new Product(2, "电脑"));
        list.add(new Product(3, "冰箱"));
        list.add(new Product(4, "洗衣机"));
        return list;
    }
}

4.5 启动类

  添加eureka客户端的注解,然后启动服务

代码语言:javascript
复制
@EnableEurekaClient
@SpringBootApplication
public class SpringcloudFeignProductProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudFeignProductProviderApplication.class, args);
    }

}

5.编写consumer服务

5.1 创建项目

在这里插入图片描述
在这里插入图片描述

5.2 添加依赖

  需要添加service服务的依赖以及feign的依赖

代码语言:javascript
复制
<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-config</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka</artifactId>
     </dependency>
     <!-- 添加 Feign 坐标 -->
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-feign</artifactId>
     </dependency>
     <!-- 注意:需要添加 service服务的依赖 -->
     <dependency>
         <groupId>com.dpb</groupId>
         <artifactId>springcloud-feign-prodcut-service</artifactId>
         <version>1.0.1-RELEASE</version>
     </dependency>
 </dependencies>

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>Dalston.SR5</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

5.3 配置信息

代码语言:javascript
复制
spring.application.name=shop-product-consumer
server.port=9090
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/

5.4 创建接口

  本接口继承自service中的接口,添加@FeignClient接口,指定provider的服务名称。

代码语言:javascript
复制
@FeignClient(name="shop-product-provider")
public interface ProductConsumerService extends ProductService {


}

5.5 创建控制器

代码语言:javascript
复制
/**
 * @program: springcloud-feign-prodcut-consumer
 * @description: 消费者提供服务
 * @author: 波波烤鸭
 * @create: 2019-06-07 10:47
 */
@RestController
public class ProductController {

    @Autowired
    ProductConsumerService consumerService;
    /**
     * Consumer 中的查询所有商品的方法
     * @return
     */
    @RequestMapping(value="/list",method= RequestMethod.GET)
    public List<Product> getAll(){
        return this.consumerService.findAll();
    }

}

5.6 创建启动器

代码语言:javascript
复制
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudFeignProdcutConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudFeignProdcutConsumerApplication.class, args);
    }

}

5.7 启动测试

  分别启动provider和consumer,然后访问consumer的服务,如下

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 什么是 Feign
  • 二、 什么是声明式,有什么作用,解决什么问题?
  • 三、Feign入门案例
    • 1.设计需求
      • 2.服务结构
        • 3.编写service服务
          • 3.1 创建项目
          • 3.2 添加依赖
          • 3.3 声明接口
        • 4.编写provider服务
          • 4.1 创建项目
          • 4.2 添加依赖
          • 4.3 配置文件设置
          • 4.4 服务实现
          • 4.5 启动类
        • 5.编写consumer服务
          • 5.1 创建项目
          • 5.2 添加依赖
          • 5.3 配置信息
          • 5.4 创建接口
          • 5.5 创建控制器
          • 5.6 创建启动器
          • 5.7 启动测试
      相关产品与服务
      微服务引擎 TSE
      微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档