負載均衡:将使用者請求分攤到多個服務上,進而達到系統的高可用性。
常見:軟體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學習系列目錄