SpringCloud--Feign负载均衡(6)

x33g5p2x  于2021-12-18 转载在 其他  
字(4.8k)|赞(0)|评价(0)|浏览(266)

什么是Feign
Feign 是一个声明式的我web服务客户端,使得编写web服务客户端变得非常容易 只要 创建一个 接口就行,然后后面加上注解 就可以
feign
Feign 只在使编写java Http 客户端变得更容易
前面在使用 Ribbon +RsetTemplate时利用RsetTemplate对Http请求的封装处理,形成了一套模板化的调用方法,但是在实际 开发中,由于对服务依赖的调用可能不止一个,往往一个接口会被多处调用,所以通常会针对 每一为服务自行封装一些客户 端类来包装这些依赖服务的调用,所以Feign在此基础上做了进一步的封装, 由它来帮助我们定义和实现依赖服务接口的定义 在Feign的实现下 我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解 ,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的 接口绑定 ,简化了使用 SpringCloud Rinnon时 自动封装服务调用客户端的开发量
Feign集成Ribbon
利用Ribbon维护了 微服务的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是 通过Feign只需要定义服务绑定接口且以声明的方式的方法,简单的实现了服务调用

构建一个 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>

yml 文件

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.接口

这个注解@FeignClient(value = “注册微服务的名字”) 是表示你要连接微服务的名字就 注册到Eureka的名字

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 默认 的轮询

相关文章