负载均衡:将用户请求分摊到多个服务上,从而达到系统的高可用性。
常见:软件nginx、LVS;硬件F5等
ribbon和nginx区别
1.ribbon本地客户端负载均衡:
在调用微服务接口时,会在注册中心上获取服务信息列表之后缓存到JVM本地,从而再本地实现了RPC远程服务调用技术。
2.nginx服务端负载均衡:
将用户所有请求都交给nginx,然后再由nginx来转发请求,从而达到了服务端的负载均衡。
OpenFeign的注解
1.@FeignClient 用于声明Feign客户端可访问的Web服务
2.@EnableFeignClients 用于修饰SpringBoot应用的入口类,以通知SpringBoot启动应用时,扫描应用中声明的Feign客户端可访问的Web服务
消费端使用openFeign
1.新建module:feign-consumer-order80
2.pom.xml
<dependencies>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--公共模块:通用工具包-->
<dependency>
<groupId>cn.chen.demo</groupId>
<artifactId>api-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.yml
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
#defaultZone: http://localhost:7001/eureka # 单机版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
4.主启动类
@SpringBootApplication
@EnableFeignClients
public class OpenFeignOrderApplication {
public static void main(String[] args) {
SpringApplication.run(OpenFeignOrderApplication.class, args);
}
}
5.业务类
1)PaymentService
@Component
@FeignClient(value = "payment-service")
public interface PaymentService {
/**
* 要与提供方的controller里的方法保持一致
* @param id
*/
@GetMapping(value = "/payment/get/{id}")
public CommonResult<Payment> getById(@PathVariable ("id") Long id);
}
2)OrderController
@RestController
@RequestMapping("/consumer")
public class OrderController {
@Autowired
private PaymentService paymentService;
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id){
return paymentService.getById(id);
}
}
6.测试
两台eureka7001、7002
两台payment8001、8002
feignOrder
#Feign自带负载均衡配置项
日志打印
1.级别
NONE: 默认的,不显示任何日志
BASIC: 仅记录请求方法、URL、响应状态码以及执行时间
HEADERS:除了BASIC 中自定义的信息外,还有请求和响应的信息头
FULL: 除了HEADERS中定义的信息外, 还有请求和响应的正文以及元数据。
2.配置日志bean:OpenFeignConfig
@Configuration
public class OpenFeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
3.yml开启
# 开启feign日志
logging:
level:
# feign日志以什么级别监控哪个接口
cn.chen.cloud.service.PaymentService: debug
4.后台就会打印咯
springcloud学习系列目录