asp.net手机网站开发教程,24小时资源视频在线观看,互联网行业有哪些,怎样做企业网站RestTemplate存在的问题
代码可读性差#xff0c;编程体验不统一参数复杂#xff0c;URL难以维护
Feign远程调用
Feign简介
Feign是SpringCloud提供的一个声明式的伪Http客户端#xff0c;它使得调用远程服务就像调用本地服务一样简单#xff0c;只需要创建一个接口…RestTemplate存在的问题
代码可读性差编程体验不统一参数复杂URL难以维护
Feign远程调用
Feign简介
Feign是SpringCloud提供的一个声明式的伪Http客户端它使得调用远程服务就像调用本地服务一样简单只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了FeignFeign默认集成Ribbon所以在Nacos下默认使用Fegin默认就是实现了负载均衡的效果
官方地址https://github.com/OpenFeign/feign
基本使用 导入Fegin的依赖 !--fegin组件--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency在主类上添加Fegin的注解 EnableFeignClients // 开启Feign创建一个service并使用Fegin实现为服务调用 FeignClient(service-product)//声明调用的提供者的name
public interface IProductService {//指定调用提供者的哪个方法// FeignClientGetMapping 就是一个完整的请求路径 http://service-product/product/{pid}GetMapping(value /product/{pid})Product findByPid(PathVariable(pid) Integer pid);
}修改controller代码并启动验证 RestController
public class OrderController {Autowiredprivate IProductService productService;Autowiredprivate IOrderService orderService;//Ribbon下单RequestMapping(/order/prod/{pid})public Order order(PathVariable(pid) Integer pid) {//通过fegin调用商品微服务Product product productService.findByPid(pid);//下单(创建订单)Order order new Order();order.setUid(1);order.setUsername(测试用户);order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);return order;}
}重启order微服务查看效果 自定义配置
Feign支持很多的自定义配置如
类型作用说明feign.Logger.Level修改日志级别包括四种不同的界别NONE,BASIC,HEADERS,FULLfeign.coder.Decoder响应结果的解析器http远程调用的结果做解析例如解析json字符串为java对象feign.coder.Encoder请求参数编码将请求参数编码便于通过http请求发送feign.Contract支持的注解格式默认是SpringMVC的注解feign.Retryer失败重试机制请求失败的重试鸡翅默认是没有不会使用Ribbon的 重试
一般情况下默认值就能满足使用如果需要自定义时只需要创建自定义的Bean覆盖默认Bean即可
配置文件方式
基于配置文件修改fegin的日志级别就可以针对单个服务
feign:client:config:service-product: #针对某个微服务的配置loggerLevel: FULL #日志级别也可以针对所有服务
feign:client:config:default: #这里用default就是全局配置如果写服务名就是针对某个服务的配置loggerLevel: FULL #日志级别注意需要把日志级别设置
logging:level:com.apesource: debug而日志的级别分为四种
NONE不记录任何日志信息这是默认值BASIC仅记录请求的方法URL以及影响状态码和执行时间HEADERS在BASIC的基础上额外记录了请求和响应的头信息FULL记录所有的响应的明细包括头信息请求体元数据
Fegin使用优化
Feign底层发起http请求依赖于其他的宽街。其底层客户端实现包括
URLConnection默认实现不支持连接池Apache HttpClient支持连接池OKHttp支持连接池
因此提高Feign的性能主要手段就是使用连接池代替默认的URLConection 导入坐标openfeign也需要有 !--httpClient的依赖 --
dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId
/dependency配置连接池 feign:client:config:default:loggerLevel: BASIChttp:client:enable: true #开启feign对HttpClient的支持max-connections: 200 #最大的连接数max-connections-per-route: 50 #每个路径的最大连接数总结
日志级别尽量使用Basic使用HttpClient或OKHttp代替 URLConnection 引入feign-httpClient依赖配置问价你开启httpClient功能设置连接池参数
Dubbo
Dubbo简介
Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架致力于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。 Spring Cloud Alibaba微服务开发框架集成了Dubbo可实现微服务对外暴露Dubbo协议的接口Dubbo协议相比RESTful协议速度更快RPCRPC是远程过程 (Remote Procedure Cal) 的缩写形式调用RPC远程方法就像调用本地方法一样Dubbo之前阿里研发中间停止维护2年最后开启维护并捐献给Apache
dubbo官网http://dubbo.io/ 上图是Dubbo的工作原理图从抽象架构上 分为两层服务治理抽象控制面和Dubbo数据面
**服务治理控制面**服务治理控制面不是特指如注册中心类的单个具体组件而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等如果采用了 Service Mesh 架构则还包含 lstio 等服务网格控制面。**Dubbo数据面**据面代表集群部署的所有 Dubbo 进程进程之间通过 RPC 协议实现数据交换Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作 服务消费者(Dubbo Consumer)发起业务调用或 RPC 通信的 Dubbo 进程服务提供者(Dubbo Provider)接收业务调用或 RPC 通信的 Dubbo 进程
基础实现 提供统一业务api 实战中将所有的服务接口设计给一个叫做api的服务单独维护 此服务需要导入common实体类服务的gav public interface IProductService{Procuct findById(Integer pid);
}编辑服务提供者product 添加依赖 !--dubbo--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-dubbo/artifactId
/dependency除dubbo依赖外还需要导入 api服务的gav 添加dubbo的配置 dubbo:scan:base-packages: com.apesource.service.imp #此处写接口实现类的包路径protocols:dubbo:name: dubbo #服务协议port: -1 #服务端口 -1代表随机端口registry:address: spring-cloud://localhost # 注册中心编写并暴露服务 Service // 暴露服务此处的Service是Dubbo提供的注解而不是Spring的注意导包
public class ProductServiceImp implements ProductService{AutoWiredprivate ProductMapper productMapper;Overridepublic Product findById(Integer pid){return productMapper.findById(pid);}
}编辑服务消费者 添加依赖 !--dubbo--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-dubbo/artifactId
/dependency添加dubbo配置 dubbo:registry:address: spring-cloud://localhost # 注册中心cloud:subscribed-services: service-product #订阅的提供者名称引用服务 RestController
RequestMapping(/order)
public class OrderController {Autowired(required false)private IOrderService orderService;// 引用服务Referenceprivate IProductService productService;// 模拟下订单业务RequestMapping(/save/{pid})public Order order (PathVariable(pid) int pid) {// 调用商品的微服务Product product productService.findById(pid);// 创建订单Order order new Order();order.setUid(1);order.setUsername(测试用户);order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.save(order);return order;}
}