《一线大厂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题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的 《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 程序员代码面试指南–IT名企算法与数据结构题目最优解
- 其余像设计模式,建议可以看看下面这4份PDF(已经整理)
- 更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。
以上所提及的全部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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!