Spring Cloud-优雅的Feign

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

在之前的例子中,我们只是简单介绍了RestTemplate调用对实现,但是在实际开发中,由于对服务依赖对调用可能不止于一处,往往一个接口会被多处调用,所以我们通常都会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用。

二、什么是Feign?

===========

**Feign 是一个声明式的 Web Service 客户端。**Fegin在Ribbon的基础上做了进一步封装,由它来帮助我们定义和实现依赖服务接口的定义。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 注解。简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

三、Feign的特性

==========

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解;
  • 支持可插拔的HTTP编码器和解码器;
  • 支持Hystrix和它的Fallback;
  • 支持Ribbon的负载均衡;
  • 支持HTTP请求和响应的压缩。

四、搭建Feign

=========

4.1 建立一个父工程Maven


编写pom.xml:

org.springframework.cloud

spring-cloud-alibaba-dependencies

0.2.0.RELEASE

pom

import

org.springframework.cloud

spring-cloud-dependencies

Hoxton.SR12

pom

import

org.springframework.boot

spring-boot-dependencies

2.3.12.RELEASE

pom

import

4.2  建立子工程


注:同样是Maven

springcloud-api:存放实体类和需要调用的接口(service)

springcloud-eureka-7001:服务注册中心

springcloud-consumer-blog-feign-80:服务消费方

springcloud-provider-blog-8001:服务生产方

4.3  配置springcloud-eureka-7001


(1)建立以下目录

(2)导入依赖

org.springframework.cloud

spring-cloud-starter-eureka-server

1.4.6.RELEASE

org.springframework.boot

spring-boot-devtools

(3)编写配置文件

application.yml:

server:

port: 7001

Eureka配置

eureka:

instance:

Eureka服务端的实例名字

hostname: localhost

client:

表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要)

register-with-eureka: false

fetch-registry如果为false,则表示自己为注册中心,客户端的化为 ture

fetch-registry: false

Eureka监控页面~

service-url:

defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/

(4)编写启动类EurekaServer_7001

注意:要在主启动器上方添加 @EnableEurekaServer表示 服务端的启动类,可以接受别人注册进来

package com.yixin.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

@EnableEurekaServer

public class EurekaServer_7001 {

public static void main(String[] args) {

SpringApplication.run(EurekaServer_7001.class,args);

}

}

4.4  配置springcloud-provider-blog-8001


(1)建立以下目录

(2)导入依赖

org.springframework.cloud

spring-cloud-starter-eureka

1.4.6.RELEASE

org.springframework.boot

spring-boot-test

2.4.5

org.springframework.boot

spring-boot-starter-web

2.4.5

org.springframework.boot

spring-boot-devtools

(3)编写配置文件

application.yml:

server:

port: 8001

spring:

application:

name: springcloud-provider-blog

Eureka配置:配置服务注册中心地址

eureka:

client:

service-url:

defaultZone: http://localhost:7001/eureka/

instance:

instance-id: springcloud-provider-dept-8001 #修改Eureka上的默认描述信息

(4)编写BlogController

注意:我们这篇文章主要是为了讲清楚Feign的使用,所以一心同学并没有在这里连接数据库,怕大家被其它的依赖架包和配置文件混淆,在之后整合组件的博客中,一心同学将会进行数据库的连接以及各种组件组合以实战方式来讲解。

package com.yixin.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class BlogController {

//表示db01这个数据库

@Value(“db01”)

private String dbsource;

//注册进来的微服务,获取一些消息

@GetMapping(“/blog/info”)

public String getInfo(){

return dbsource;

}

}

(5)编写启动类BlogProvider_8001

package com.yixin.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication

@EnableEurekaClient

public class BlogProvider_8001 {

public static void main(String[] args) {

SpringApplication.run(BlogProvider_8001.class,args);

}

}

4.5  配置springcloud-api


(1)建立以下目录

(2)导入依赖

org.springframework.cloud

spring-cloud-starter-feign

1.4.6.RELEASE

org.projectlombok

lombok

(3)编写接口BlogClientService

注意:添加注解@FeignClient,微服务客户端注解。

value:指定微服务的名字,这样就可以使Feign客户端直接找到对应的微服务。

​​​​​​​package com.yixin.service;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

//value就是我们服务生产方在注册中心的服务名

@FeignClient(value = “SPRINGCLOUD-PROVIDER-BLOG”)

public interface BlogClientService {

@GetMapping(“/blog/info”)

public String getInfo();

}

4.6  配置springcloud-consumer-blog-feign-80


(1)建立以下目录

(2)导入依赖

org.springframework.cloud

spring-cloud-starter-feign

1.4.6.RELEASE

com.yixin

springcloud-api

1.0-SNAPSHOT

org.springframework.cloud

spring-cloud-starter-eureka

1.4.6.RELEASE

org.springframework.boot

spring-boot-test

2.4.5

org.springframework.boot

spring-boot-starter-web

2.4.5

org.springframework.boot

spring-boot-devtools

(3)编写配置文件

server:

port: 8000

spring:

application:

name: springcloud-consumer-blog

Eureka配置:配置服务注册中心地址

eureka:

client:

register-with-eureka: false # 不向 Eureka注册自己

service-url:

defaultZone: http://localhost:7001/eureka/

(4)编写BlogConsumerController

package com.yixin.springcloud.controller;

import com.yixin.service.BlogClientService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

@RestController

public class BlogConsumerController {

//这个就是我们springcloud-api下的接口

@Autowired

private BlogClientService blogClientService;

@GetMapping(“/consumer/blog”)

public String get(){

return “消费端:”+blogClientService.getInfo();

}

}

回顾

回顾之前使用RestTemplate进行调用:

package com.yixin.springcloud.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

@RestController

public class BlogConsumerController {

@Autowired

private RestTemplate restTemplate;

//private static final String REST_URL_PREFIX=“http://localhost:8001”;

private static final String REST_URL_PREFIX=“http://SPRINGCLOUD-PROVIDER-BLOG”;

@GetMapping(“/consumer/blog”)

public String get(){

return “消费端:”+restTemplate.getForObject(REST_URL_PREFIX +“/blog/info”, String.class);

}

}

分析:Feign和Ribbon二者对比,前者显现出面向接口编程特点,代码看起来更清爽,而且Feign调用方式更符合我们之前在做SSM或者SprngBoot项目时,Controller层调用Service层的编程习惯!

回顾结束

(5)编写启动类BlogConsumer_feign_80

package com.yixin.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication

@EnableEurekaClient

// feign客户端注解,并指定要扫描的包以及配置接口BlogClientService

@EnableFeignClients(basePackages = {“com.yixin.service”})

public class BlogConsumer_feign_80 {

public static void main(String[] args) {

SpringApplication.run(BlogConsumer_feign_80.class,args);

}

}

至此我们的Feign组件就搭建完成了!

4.7  测试


依次启动:

springcloud-eureka-7001:服务注册中心

springcloud-provider-blog-8001:服务生产方

springcloud-consumer-blog-feign-80:服务消费方

a、访问:http://localhost:7001/

出现以下界面,则说明我们的服务生产方成功注册到Eureka了!

b、访问:http://localhost:8000/consumer/blog

出现以下界面,则说明测试成功!

结局:总结+分享

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱

  • Java互联网工程师面试1000题

image.png

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。

  • 程序员代码面试指南–IT名企算法与数据结构题目最优解

image.png

  • 其余像设计模式,建议可以看看下面这4份PDF(已经整理)

image.png

  • 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。

image.png

以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
明测试成功!

结局:总结+分享

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱

  • Java互联网工程师面试1000题

[外链图片转存中…(img-1Xq3kgm7-1714749484978)]

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。

  • 程序员代码面试指南–IT名企算法与数据结构题目最优解

[外链图片转存中…(img-3wSf2e6S-1714749484979)]

  • 其余像设计模式,建议可以看看下面这4份PDF(已经整理)

[外链图片转存中…(img-CvRrhu2V-1714749484979)]

  • 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。

[外链图片转存中…(img-6zrMWbTl-1714749484979)]

以上所提及的全部Java面试学习的PDF及笔记,如若皆是你所需要的,那么都可发送给你!

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值