文章28 | 阅读 12719 | 点赞0
什么是Feign
Feign 是一个声明式的我web服务客户端,使得编写web服务客户端变得非常容易 只要 创建一个 接口就行,然后后面加上注解 就可以
feign
Feign 只在使编写java Http 客户端变得更容易
前面在使用 Ribbon +RsetTemplate时利用RsetTemplate对Http请求的封装处理,形成了一套模板化的调用方法,但是在实际 开发中,由于对服务依赖的调用可能不止一个,往往一个接口会被多处调用,所以通常会针对 每一为服务自行封装一些客户 端类来包装这些依赖服务的调用,所以Feign在此基础上做了进一步的封装, 由它来帮助我们定义和实现依赖服务接口的定义 在Feign的实现下 我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解 ,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的 接口绑定 ,简化了使用 SpringCloud Rinnon时 自动封装服务调用客户端的开发量
Feign集成Ribbon
利用Ribbon维护了 微服务的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是 通过Feign只需要定义服务绑定接口且以声明的方式的方法,简单的实现了服务调用
1)
建好的构造
Feign的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
pom文件
<dependencies>
<dependency><!-- 自己定义的api -->
<groupId>com.xxx</groupId>
<artifactId>microservicecloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- Ribbon相关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
server:
port: 8084
eureka:
client: #客户端注册进eureka服务列表内
register-with-eureka: false # 自己不能注册
service-url:
defaultZone: http://euerka7001.com:7001/eureka/,http://euerka7002.com:7002/eureka/,http://euerka7003.com:7003/eureka/
# 现在是集群
Feign 是一个声明式的我web服务客户端,使得编写web服务客户端变得非常容易 只要 创建一个 接口就行,然后后面加上注解 就可以 所以 创建一个接口
我在我的公共的 api项目里添加 一个UserServiceFeign 的接口
1)api的项目里导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
然后在api的公共类里定义一个接口 和其实就是提供者 的 接口 就上换个 接口名
UserServiceFeign.接口
package com.xxx.service;
import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.xxx.user.User;
@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface UserServiceFeign {
@RequestMapping(value = "/list/userlist",method = RequestMethod.GET)
public List<User> userlist();
}
接口 创建好 回到 feign的消费者的项目里
在创建controller
把公共项目 里的接口 注入进来
package com.xxx.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.xxx.service.UserServiceFeign;
import com.xxx.user.User;
@Controller
public class UserControllerConsumer {
@Autowired
private UserServiceFeign userServiceFeign;
@RequestMapping(value="/tt/user/list", method = RequestMethod.GET)
@ResponseBody
public List<User> userlist() {
return userServiceFeign.userlist();
}
}
@EnableFeignClients(basePackages={“com.xxx”})
@ComponentScan(“com.xxx”)
这两个注解的意思是你的接口在上面包下
package com.xxx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.zuul.filters.discovery.PatternServiceRouteMapper;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages={"com.xxx"})
@ComponentScan("com.xxx")
public class UserConsumerFeignApp {
public static void main(String[] args) {
SpringApplication.run(UserConsumerFeignApp.class, args);
}
}
启动 Eureka注册 集群(7001,7002,7003)–》 提供者(8081,8082,80893)–》Feign 负载均衡
我这里 上一次启动7个项目–你随意 有注册 和提供者 和负载均衡就行
下一步访问 页面 测试
我的 三个提供者 连了3个数据库 更好体现 Feign 的负载均衡
我访问三次 三次的是不同的 数据库查的数据 这就是 Feign 默认 的轮询
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44520739/article/details/89389031
内容来源于网络,如有侵权,请联系作者删除!