一、Feign远程调用
Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign, Feign 默认集了Ribbon, 所以在Nacos下使⽤Fegin默认就实现了负载均衡的效果
官⽅地址: https://github.com/OpenFeign/feign
1.1基本使⽤
1加⼊Fegin的依赖
<!--fegin组件--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2在主类上添加Fegin的注解
@EnableFeignClients// 开启 Fegin
3创建⼀个service, 并使⽤Fegin实现微服务调⽤
4 修改controller代码,并启动验证
5 重启order微服务,查看效果
1.2 ⾃定义配置
Feign可以⽀持很多的⾃定义配置,如下表所示:
⼀般情况下,默认值就能满⾜我们使⽤,如果要⾃定义时,只需要创建⾃定义的@Bean覆盖默认Bean 即可。
配置⽂件⽅式
基于配置⽂件修改feign的⽇志级别可以针对单个服务:
feign:client:config:service-product: # 针对某个微服务的配置loggerLevel: FULL #日志级别
也可以针对所有服务:
feign:client:config:default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别
注意:需要把⽇志级别设置
logging:level:com.wei: debug
⽽⽇志的级别分为四种:
- NONE:不记录任何⽇志信息,这是默认值。
- BASIC:仅记录请求的⽅法, URL以及响应状态码和执⾏时间
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
1.3 Feign使⽤优化
Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:
- URLConnection:默认实现,不⽀持连接池
- Apache HttpClient :⽀持连接池
- OKHttp:⽀持连接池
因此提⾼Feign的性能主要⼿段就是使⽤连接池代替默认的URLConnection
这⾥我们⽤Apache的HttpClient来演示
1 引入依赖
<!--httpClient的依赖 --> <dependency><groupId>io.github.openfeign</groupId><artifactId>feign-httpclient</artifactId> </dependency>
2 配置连接池
feign:client:config:default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #日志级别httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 #最大连接数max-connections-per-route: 50 #每个路径的最大连接数
总结:
1.⽇志级别尽量⽤basic
2.使⽤HttpClient或OKHttp代替URLConnection
- 引⼊feign-httpClient依赖
- 配置⽂件开启httpClient功能,设置连接池参数
二、Dubbo远程调用
2.1 基本简介
Dubbo是阿⾥巴巴开源的基于 Java 的⾼性能 RPC分布式服务框架,致⼒于提供⾼性能和透明化 的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。 Spring Cloud Alibaba微服务开发框架集成 了Dubbo,可实现微服务对外暴露Dubbo协议的接⼝,Dubbo协议相⽐RESTful协议速度更快 RPC:RPC是远程过程(Remote Procedure Call)的缩写形式,调⽤RPC远程⽅法就像调⽤本地 ⽅法⼀样,Dubbo之前阿⾥研发,中间停⽌维护2年,最后开启维护并捐献给Apache
dubbo官⽹: http://dubbo.io/
2.2 基础实现
A.提供统⼀业务api
B.编辑服务提供者
添加依赖
<!--dubbo--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
添加dubbo配置
dubbo:scan:base-packages: com.wei.service.implprotocols:dubbo:name: dubboport: -1registry:address: spring-cloud://localhost
编写并暴露服务
C.编辑服务消费者
添加依赖
<!--dubbo--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
添加dubbo配置
dubbo:registry:address: spring-cloud://localhostcloud:subscribed-services: service-product
引⽤服务
服务调⽤测试