本项目只涉及到controller层及service层,其他层可忽略
OpenFeign自带Ribbon,因此我们只要创建相同的服务名称端口不同,Ribbon自动就会给我们实现负载均衡

application.yml:
server:
# 端口
port: 9003
spring:
application:
#服务名称
name: feign-provider
cloud:
discovery:
#nacos地址
server-addr: 127.0.0.1:8848
#数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mp?serverTimezone=UTC
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
management:
endpoint:
web:
exposure:
include: '*'
#mybatis配置(别名及其他)
mybatis:
mapper-locations: classpath:*.xml
type-aliases-package: com.zi.pojo
# 打印sql语句
logging:
level:
com.seamax.bdsearch.dao: DEBUG
该服务与9003无区别,只是端口不同
application.yml
server:
# 端口
port: 9004
spring:
application:
#服务名称
name: feign-provider
cloud:
discovery:
#nacos地址
server-addr: 127.0.0.1:8848
#数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mp?serverTimezone=UTC
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
management:
endpoint:
web:
exposure:
include: '*'
#mybatis配置(别名及其他)
mybatis:
mapper-locations: classpath:*.xml
type-aliases-package: com.zi.pojo
# 打印sql语句
logging:
level:
com.seamax.bdsearch.dao: DEBUG
两个模块均一样:
UserController的代码:
@Controller
//@RequestMapping("/zi")
public class UserController {
@GetMapping("/test")
@ResponseBody
public String test01(){
return "serverPort:" + serverPort;
}
}
需要导入openFeign等依赖
①接口OpenFeignService:
/**
* 此接口就是配合使用OpenFeign的接口,
* 在此接口中添加@FeignClient接口同时标注
* 要调用的服务端名称,同时使用与服务提供者
* 方法签名一致的抽象方法来表示远程调用的
* 具体内容
*/
@Service
@FeignClient("feign-provider")//远程调用的服务名称
public interface OpenFeignService {
/**
* 该方法表示远程调用zi/{id}接口
* @param uid
* @return
*/
@GetMapping("zi/{id}")
public User getUserById(@PathVariable("id") Integer uid);
@GetMapping("/zi/test")
@ResponseBody
public String test01();
@GetMapping("/timeOut")
public String timeOut();
}
②OpenFeignController
@RestController
//@RequestMapping("/zi")
public class OpenFeignController {
@Autowired
private OpenFeignService openFeignService;
@GetMapping("getInfo/{id}")
public User getInfo(@PathVariable("id") Integer uid){
return openFeignService.getUserById(uid);
}
@GetMapping("/test")
public String test01(){
return openFeignService.test01();
}
//OpenFeginController
@GetMapping("/testTimeout")
@ResponseBody
public String TestTimeout(){
return openFeignService.timeOut();
}
}
③启动类
@SpringBootApplication
@EnableDiscoveryClient//让nacos找到
@EnableFeignClients
public class CloudalibabaOpenFeignConsumer8888Application {
public static void main(String[] args) {
SpringApplication.run(CloudalibabaOpenFeignConsumer8888Application.class, args);
}
@Bean
Logger.Level feignLoggerLevel(){
//开启详细日志
return Logger.Level.FULL;
}
}
④配置文件
server:
port: 8888
spring:
application:
name: nacos-consumer-openFeign
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
# 指的是建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 5000
# 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用时间
ConnectTimeout: 5000
management:
endpoints:
web:
exposure:
include: '*'
# 配置日志
logging:
level:
#openfeign日志以什么级别监控哪个接口
# 注意监视的接口是在level的下一层级【tab】
com.zi.service.OpenFeignService: debug

一般来说,如果我们远程调用服务1s之内仍未返回结果时就会报错

在yml文件中控制超时时间:
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
#指的是建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 5000
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ConnectTimeout: 5000
全部结构:
application.yml:
server:
port: 8888
spring:
application:
name: nacos-consumer-openFeign
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
# 指的是建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 5000
# 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用时间
ConnectTimeout: 5000
management:
endpoints:
web:
exposure:
include: '*'
@SpringBootApplication
@EnableDiscoveryClient//让nacos找到
@EnableFeignClients
public class CloudalibabaOpenFeignConsumer8888Application {
public static void main(String[] args) {
SpringApplication.run(CloudalibabaOpenFeignConsumer8888Application.class, args);
}
@Bean
Logger.Level feignLoggerLevel(){
//开启详细日志
return Logger.Level.FULL;
}
}
# 配置日志
logging:
level:
#openfeign日志以什么级别监控哪个接口
# 注意监视的接口是在level的下一层级【tab】
com.zi.service.OpenFeignService: debug
全部结构:
application.yml
server:
port: 8888
spring:
application:
name: nacos-consumer-openFeign
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
# 指的是建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 5000
# 指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用时间
ConnectTimeout: 5000
management:
endpoints:
web:
exposure:
include: '*'
# 配置日志
logging:
level:
#openfeign日志以什么级别监控哪个接口
# 注意监视的接口是在level的下一层级【tab】
com.zi.service.OpenFeignService: debug