当前位置: 首页 > news >正文

深圳住房和建设局网站 宝安网站建设鼎网络

深圳住房和建设局网站 宝安,网站建设鼎网络,网站备案 新增接入,中国企发网在微服务的服务集群中服务与服务之间需要调用暴露的服务.那么就需要在服务内部发送http请求#xff0c; 我们可以使用较为老的HttpClient实现#xff0c;也可以使用SpringCloud提供的RestTemplate类调用对应的方法来发送对应的请求。 说明#xff1a; 现在有两个微服务一个是… 在微服务的服务集群中服务与服务之间需要调用暴露的服务.那么就需要在服务内部发送http请求 我们可以使用较为老的HttpClient实现也可以使用SpringCloud提供的RestTemplate类调用对应的方法来发送对应的请求。 说明 现在有两个微服务一个是order-service订单服务一个是user-service用户服务在订单服务中需要使用user-service暴露的服务调用方法获取user信息 Service public class OrderService { // 注入 restTemplate // 说明: RestTemplate类已经在启动类中通过Bean注解放入IOC容器, 此时才可以注入,不然空指针Autowiredprivate RestTemplate restTemplate;Autowiredprivate OrderMapper orderMapper;public Order queryOrderById(Long orderId) {// 查询订单Order order orderMapper.findById(orderId);// 拼接地址 String url http://user-service/user/order.getUserId();// 发送请求User user restTemplate.getForObject(url, User.class);// 存入order中order.setUser(user);// 返回return order;} }RestTemplate方式的优缺点 优点 灵活简单 缺点 代码可读性差编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端官方地址https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送解决上面提到的问题。 一 Feign替代RestTemplateFeign的使用 因为Feign的请求地址是从注册中心获取的所以要求对应的服务已向注册中心注册可看下面这篇笔记 Nacos注册中心一些配置说明_yfs1024的博客-CSDN博客 1. 引入依赖 我们在order-service服务的pom文件中引入feign的依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.7.RELEASE/version /dependency2. 添加注解 在order-service的启动类添加注解开启Feign的功能 SpringBootApplication EnableFeignClients public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);} }3. 编写Feign的客户端 在order-service中新建一个接口内容如下 FeignClient(user-service) // value为对应的服务名 public interface UserClient {GetMapping(/user/{id})User findById(PathVariable(id) Long id); }这个客户端主要是基于SpringMVC的注解来声明远程调用的信息比如 服务名称user-service请求方式GET请求路径/user/{id}请求参数Long id返回值类型User 这样Feign就可以帮助我们发送http请求无需自己使用RestTemplate来发送了。 Service public class OrderService {Autowiredprivate OrderMapper orderMapper;Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 查询订单Order order orderMapper.findById(orderId);// 调用方法order.setUser(userClient.findById(order.getUserId()));// 返回return order;} }这样看起来就十分的优雅, 那么为什么Feign通过服务名称就可以拉取到注册中心的服务呢?在之前介绍Eureka的时候说过一个Ribbon组件,他的作用就是如此. 具体的源码分析在之前的笔记中也有 Eureka注册中心及Ribbon的源码跟踪_yfs1024的博客-CSDN博客 总结 使用Feign的步骤 ① 引入依赖 ② 添加EnableFeignClients注解 ③ 编写FeignClient接口 二 Feign的自定义配置 Feign可以支持很多的自定义配置如下表所示 类型作用说明feign.Logger.Level修改日志级别包含四种不同的级别NONE、BASIC、HEADERS、FULLfeign.codec.Decoder响应结果的解析器http远程调用的结果做解析例如解析json字符串为java对象feign.codec.Encoder请求参数编码将请求参数编码便于通过http请求发送feign. Contract支持的注解格式默认是SpringMVC的注解feign. Retryer失败重试机制请求失败的重试机制默认是没有不过会使用Ribbon的重试 一般情况下默认值就能满足我们使用如果要自定义时只需要创建自定义的Bean覆盖默认Bean即可。 下面以日志为例来演示如何自定义配置。 方式一 配置文件的方式 基于配置文件修改feign的日志级别可以针对单个服务 feign: client:config: userservice: # 针对某个微服务的配置loggerLevel: BASIC # 日志级别 也可以针对所有服务 feign: client:config: default: # 这里用default就是全局配置如果是写服务名称则是针对某个微服务的配置loggerLevel: BASIC # 日志级别 日志的级别分为四种 NONE不记录任何日志信息这是默认值。BASIC仅记录请求的方法URL以及响应状态码和执行时间HEADERS在BASIC的基础上额外记录了请求和响应的头信息FULL记录所有请求和响应的明细包括头信息、请求体、元数据。 方式二 java代码的方式 先声明一个类然后声明一个Logger.Level的对象 public class DefaultFeignConfiguration {Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC; // 日志级别为BASIC} }如果要全局生效将其放到启动类的EnableFeignClients这个注解中 EnableFeignClients(defaultConfiguration DefaultFeignConfiguration .class) 如果是局部生效则把它放到对应的FeignClient这个注解中 FeignClient(value userservice, configuration DefaultFeignConfiguration .class) 三 Feign的优化 Feign底层发起http请求依赖于其它的框架。其底层客户端实现包括 URLConnection默认实现不支持连接池 Apache HttpClient 支持连接池 OKHttp支持连接池 因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。 这里使用HttpClient 引入依赖 在order-service的pom文件中引入Apache的HttpClient依赖 !--httpClient的依赖 -- dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactIdversion10.10.1/version /dependency配置连接池 在order-service的application.yml中添加配置 feign:client:config:default: # default全局的配置loggerLevel: BASIC # 日志级别BASIC就是基本的请求和响应信息httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 # 最大的连接数max-connections-per-route: 50 # 每个路径的最大连接数总结Feign的优化 1.日志级别尽量用basic 2.使用HttpClient或OKHttp代替URLConnection ① 引入feign-httpClient依赖 ② 配置文件开启httpClient功能设置连接池参数 下面的是基于所做项目的描述,所以如果学习Feign到这里就够到,如果想要知道具体的实战应用,可以继续往下看. 四 (重要)Feign在开发中的使用方式 所谓最近实践就是使用过程中总结的经验最好的一种使用方式。 通过观察可以发现Feign的客户端与服务提供者的controller代码非常相似 // Feign的客户端 FeignClient(user-service) // value为对应的服务名 public interface UserClient {GetMapping(/user/{id})User findById(PathVariable(id) Long id); }// 服务提供者的controller代码 GetMapping(/user/{id}) public User queryById(PathVariable(id) Long id) {return userService.queryById(id); }那么 有没有一种办法简化这种重复的代码编写呢 方式一 继承的方式(不推荐) 一样的代码可以通过继承来共享 1定义一个API接口利用定义方法并基于SpringMVC注解做声明。 2Feign客户端和Controller都集成改接口 优点 简单实现了代码共享 缺点 服务提供方、服务消费方紧耦合参数列表中的注解映射并不会继承因此Controller中必须再次声明方法、参数列表、注解 方式二 抽取方式 将Feign的Client抽取为独立模块并且把接口有关的POJO、默认的Feign配置都放到这个模块中提供给所有消费者使用。 例如将UserClient、User、Feign的默认配置都抽取到一个feign-api包中所有微服务引用该依赖包即可直接使用。 1)抽取 创建一个feign-api模块, 导入依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.7.RELEASE/version /dependency然后将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中 2) 在order-service中使用feign-api 首先删除order-service中的UserClient、User、DefaultFeignConfiguration等类或接口。 在order-service的pom文件中中引入feign-api的依赖 !-- 导入刚才自己创建的feign-api gav坐标 -- dependencygroupIdcn.itcast.demo/groupIdartifactIdfeign-api/artifactIdversion1.0/version /dependency此时重启服务会发现 这是因为UserClient现在在cn.itcast.feign.clients包下 而order-service的EnableFeignClients注解是在cn.itcast.order包下不在同一个包无法扫描到UserClient。 解决扫描包问题 方式一 指定Feign应该扫描的包 EnableFeignClients(basePackages cn.itcast.feign.clients)方式二(推荐) 指定需要加载的Client接口 EnableFeignClients(clients {UserClient.class})
http://www.hkea.cn/news/14483855/

相关文章:

  • 怎么给网站wordpresswordpress邮件伪造
  • 怎么样建设企业网站wordpress商品采集
  • 甘肃省建设厅安全员官方网站网站运营的含义
  • 聊城阳谷网站建设石家庄全网seo
  • 龙岩新罗区建设局网站网站建设入门教程视频
  • 成都市网站设计开发网站建设中服务器搭建方式
  • 上海网站开发哪家好薇暴雪国际服
  • 百度网站建设如何网站信息登记表扫描件
  • xwiki做的网站wordpress 心情评论
  • 北京城乡建设网站wordpress高仿主题
  • 南沙区交通和建设局网站海外推广专员
  • 网站线下推广方式网络营销渠道
  • 事业单位 网络网站建设天翼云虚拟主机
  • 中国铁路总公司建设管理部网站做机械设计兼职的网站
  • 迎中国建设银行网站wordpress调用文章缩略图
  • 网站建设开发计划个人网站怎么做视频
  • 设计行业网站二环建设部网站
  • 网站需要写哪些内容吗品牌建设实施方案 报优评奖
  • 企业的展厅设计公司seo模拟点击
  • dedecms网站后台模板修改wordpress在线朗读
  • wordpress文件上传下载在线seo诊断
  • 淘宝店铺怎么推广和引流广州seo优化外包公司
  • 网站搭建用什么软件怎么在vk网站上做推广
  • 网站设置首页连接分类页的视频教程选择做网站销售的优势
  • 凡科网站怎么做授权查询昌大建设集团地址
  • 卢氏县住房和城乡建设局网站王烨烨
  • asp.net网站开发简明教程查找网络营销方式
  • 商城类网站如何做WordPress编辑文章空白
  • 域名网站注册认证中小企业微信网站建设
  • 网站优化 北京江苏建设类高级工程师在那个网站公示