SpringCloud--Feign负载均衡(6)

Feign微服务客户端精讲
Feign作为声明式Web服务客户端,简化了Java HTTP客户端的编写,仅需定义接口并使用注解即可完成服务调用。Feign整合Ribbon实现负载均衡,减少服务依赖调用的封装工作。本文详细介绍Feign的集成与使用,包括依赖添加、接口定义及服务调用示例。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

  T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值