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

谷雨网页设计作业爱站网seo

谷雨网页设计作业,爱站网seo,汕头市公司网站建设多少钱,wordpress文章展示模板文章目录 Feign介绍Feign的基本使用自定义Feign的配置Feign性能优化Feign最佳实践 Feign介绍 RestTemplate远程调用存在的问题:代码可读性差,java代码中夹杂url;参数复杂很难维护 String url "http://userservice/user/" order.g…

文章目录

    • Feign介绍
    • Feign的基本使用
    • 自定义Feign的配置
    • Feign性能优化
    • Feign最佳实践

Feign介绍

RestTemplate远程调用存在的问题:代码可读性差,java代码中夹杂url;参数复杂很难维护

String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);

Feign是一个声明式的http发送的客户端,用来替代RestTemplate;使用Feign可以通过直接写java接口发送http请求,而不需要定义url

在这里插入图片描述

Feign的基本使用

  1. 引入依赖
  2. 添加@EnableFeignClients注解
  3. 编写FeignClient接口
  1. 消费者(案例为order-service)中引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 启动类中添加注解@EnableFeignClients
  2. 定义UserClient接口,该接口可以发送http请求,且写法与SpringMVC相似。接口添加@FeignClient注解,userservice表示该类使用的http请求是用来访问userservice服务的。
@FeignClient("userservice")
public interface UserClient {@GetMapping("user/{id}")User findById(@PathVariable("id")Long id);
}
  1. OrderService中使用UserClient接口发送http请求
public class OrderService {@Autowiredprivate OrderMapper orderMapper;//自动注入UserClient@AutowiredUserClient userClient;public Order queryOrderById(Long orderId){Order order = orderMapper.findById(orderId);// 发送http请求,以order.getUserId()为参数User user = userClient.findById(order.getUserId());order.setUser(user);return order;}
}

以下是之前使用RestTemplate的OrderService

@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;//获取restTemplate对象@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.定义url// String url = "http://localhost:8081/user/"+order.getUserId();String url = "http://userservice/user/"+order.getUserId(); //修改为服务名// 3.发送http请求User user = restTemplate.getForObject(url, User.class);// 4.封装userorder.setUser(user);// 5.返回return order;}
}
  1. 在浏览器中测试发送4次请求,http://localhost:8080/order/103。发现UserApplication和UserApplication2各自被访问两次。因此,Feign已经自动实现了负载均衡,在Feign的依赖中发现了Ribbon依赖。

在这里插入图片描述

自定义Feign的配置

在这里插入图片描述通常只需要配置日志级别

  1. 在application.yml中配置

配置日志级别有两种:1、全局配置,对所有访问的服务的http请求都有效;2、单个service配置,对某个服务进行配置

  • 全局配置
feign:client:config:default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL # 日志级别

浏览器中测试,发现order-service访问userservice时控制台打印出来了很多http请求日志信息
在这里插入图片描述

  • 单个服务的配置
feign:client:config:userservice: # 针对userservice微服务的配置loggerLevel: FULL

测试发现,仍打印出了日志信息

  1. 使用java代码配置
    定义一个Feign配置类FeignClientConfiguration ,这里不用加@SpringBootConfiguration;
    然后声明一个Logger.Level的Bean
public class FeignClientConfiguration {@Beanpublic Logger.Level level(){return Logger.Level.BASIC; //只打印基础日志}
}

全局配置,直接在启动类中配置,注入添加的Feign配置类

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

局部配置,在对应的Client接口中配置,注入添加的Feign配置类
@FeignClient(value = “userservice”,configuration = FeignClientConfiguration.class)

@FeignClient(value = "userservice",configuration = FeignClientConfiguration.class)
public interface UserClient {@GetMapping("user/{id}")User findById(@PathVariable("id")Long id);
}

浏览器中测试,发现order-service访问userservice时控制台打印出来了基础的http请求日志信息
在这里插入图片描述

Feign性能优化

在这里插入图片描述

引入连接池的步骤

  1. 引入feign-httpclient依赖
<!--httpClient的依赖 -->
<dependency>    <groupId>io.github.openfeign</groupId>    <artifactId>feign-httpclient</artifactId>
</dependency>
  1. 在applicaiton.yml中配置httpclient或者okhttp,添加连接池参数
feign:httpclient:    # 使用的连接池enabled: true # 开启feign对HttpClient的支持    max-connections: 200 # 最大的连接数    max-connections-per-route: 50 # 每个路径的最大连接

Feign最佳实践

在这里插入图片描述
方式二:将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用
在这里插入图片描述

  1. 首先创建一个module,命名为feign-api,然后引入feign的starter依赖
  2. 将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
  3. 在order-service中引入feign-api的依赖
  4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
  5. 重启测试
  1. 创建module名叫feign-api,引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 修改feign-api的包结构如下
    在这里插入图片描述

  2. 删除order-service中原有的UserClient,FeignClientConfiguration,User;修改后的order-service包结构如下
    在这里插入图片描述

  3. 在order-service的pom文件中引入feign-api依赖

<dependency><groupId>cn.itcast.demo</groupId><artifactId>feign-api</artifactId><version>1.0</version>
</dependency>

在order-service重新导入UserClient,FeignClientConfiguration,User类,项目不再报红

在这里插入图片描述

  1. 启动,发现启动失败。OrdeApplication报错如下:UserClient的Bean不存在
Description:Field userClient in cn.itcast.order.service.OrderService required a bean of type 'cn.itcast.feign.clients.UserClient' that could not be found.The injection point has the following annotations:- @org.springframework.beans.factory.annotation.Autowired(required=true)Action:Consider defining a bean of type 'cn.itcast.feign.clients.UserClient' in your configuration.

前后的UserClient同样都加了@FeignClient注解,但现在没扫描到。原因是因为之前的UserClient在cn.itcast.order.clients包下面,而现在在cn.itcast.feign.clients包下面,但是spring创建对象时只能扫描到启动类所在包(cn.itcast.order)下面,因此并不会将UserClient创建对象放到spring容器中。

有以下解决方案

//方案一:在启动类的@EnableFeignClients注解后加入UserClient所在包basePackages = "cn.itcast.feign.clients"
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")//方案二(推荐):加入UserClient的字节码
@EnableFeignClients(clients = {UserClient.class})
  1. 修改OrderApplicaiton启动类后,测试。成功使用UserClient访问到userservice。
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class,clients = {UserClient.class}) //增加clients = {UserClient.class}
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}
http://www.shuangfujiaoyu.com/news/60630.html

相关文章:

  • 建立网站的顺序免费建站哪个网站最好
  • 温州有没有做鞋的网站网络公司是做什么的
  • 怎挖掘网站关键词淘宝交易指数换算工具
  • 给甜品网站做seo什么叫seo网络推广
  • 做网站开发最多能做几年推广引流平台app大全
  • 全景图制作平台网站建设网络推广比较经典和常用的方法有
  • html5响应式网站建设平台微商怎么做推广加好友
  • 容县网站开发火狐搜索引擎
  • 网站轮播代码seo站内优化公司
  • 二维码生成器微信小程序seo优化排名技术百度教程
  • 做网站域名怎么选有利于seo百度搜索指数是怎么计算的
  • 做影视网站规模不大培训课程网站
  • 沈阳网站建设58同城湖南网站建设营销推广
  • 华为官方网站手机商城快手作品免费推广软件
  • 建设银行 成都 招聘网站怎样做好销售和客户交流
  • 自己如何在网上做网站新泰网站seo
  • python基础教程电子书正版搜索引擎优化
  • 备案名称和网站名称不一致公司域名注册查询
  • 做bc网站排名设计网站都有哪些
  • 网站改版 权重seo公司推荐推广平台
  • 网站建站服务的公司驻马店百度seo
  • 音频网站建设微博指数
  • 泉州网站建设 推广百度 营销推广怎么操作
  • 网站开发过程的基本环节百度快照怎么发布
  • 定制网站开发冬天里的白玫瑰自己建网站怎么建
  • 做网站是什么课企业如何做网站
  • 一个网站seo做哪些工作建网站
  • 网站正在建设中亚洲企业培训课程名称
  • 做一个中英文双语网站建设多少钱推广平台排名
  • 那些做刷客的网站网络营销热点事件案例分析