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

电子商城网站开发价格建什么网站访问量高

电子商城网站开发价格,建什么网站访问量高,广州系统软件app开发公司,做网站数据库坏了目录 一、Feign 简介 1、RestTemplate 远程调用中存在的问题 2、定义和使用 Feign 客户端 3、Feign 自定义配置 4、Feign 性能优化 5、Feign 最佳实践 6、Feign 使用问题汇总 二、Gateway 网关简介 1、搭建网关服务 2、路由断言工厂 3、路由的过滤器配置 4、全局过…目录 一、Feign 简介 1、RestTemplate 远程调用中存在的问题 2、定义和使用 Feign 客户端 3、Feign 自定义配置 4、Feign 性能优化 5、Feign 最佳实践 6、Feign 使用问题汇总 二、Gateway 网关简介 1、搭建网关服务 2、路由断言工厂 3、路由的过滤器配置 4、全局过滤器 5、过滤器链执行顺序 6、网关的 cors 跨域配置 7、Gateway 网关使用问题汇总 一、Feign 简介 Feign 是 Netflix 开发的声明式、模板化的 Http 客户端Feign 可以帮助我们更快捷、优雅地调用Http API。 Feign 是在 Ribbon 的基础上进行了一次改进是一个使用起来更加方便的 HTTP 客户端。SpringCloud 对 Feign 进行了增强使 Feign 支持了 Spring MVC 注解并整合了 Ribbon 和 Eureka集成了服务发现和负载均衡从而让 Feign 的使用更加方便。 1、RestTemplate 远程调用中存在的问题 该远程调用的代码有以下问题 代码可读性差编程体验不统一参数复杂URL 难以维护 2、定义和使用 Feign 客户端 在 SpringCloud 中使用 Feign 非常简单创建一个 Interface并在接口上添加一些注解代码就完成了。  1引入依赖 给需要远程调用的模块引入 openfeign 起步依赖 2添加 EnableFeignClients 注解 给需要远程调用的启动类添加 EnableFeignClients 注解 3编写 Feign 客户端 添加 FeignClient 和 GetMapping 注解  上述注解声明了如下信息 服务名称user-service请求方式get请求路径/user/{userId}请求参数String userId返回值类型User 4OrderService 远程调用过程 该远程调用过程就好像平常处理请求的逆过程 OrderService 将 userId 传递给接口中的方法queryUserById 方法再将参数赋值给请求路径中的占位符 {userId}然后再通过 get 请求向 UserController 发送请求最终获得 User 对象信息 3、Feign 自定义配置 Spring 虽然帮我们做好了配置但是也允许我们修改默认配置。 配置 Feign 日志有 2 种方式 1application/bootstrap 配置文件方式 注意logging.level 属性值需要改为 trace  2Java 代码方式 4、Feign 性能优化 Feign 底层客户端实现 URLConnection默认使用java 原生 jdk性能较差不支持连接池Apache HttpClient支持连接池推荐OKHttp支持连接池推荐 对 Feign 的性能优化最重要的一点就是对底层实现的改变。 因此优化 Feign 的性能主要包括 使用连接池代替默认的 URLConnection日志级别最好用 basic 或 none因为开启日志也需要占用较多资源 下面以 HttpClient 为例子说明性能优化的步骤 1引入依赖 httpClient 已经被 Spring 管理好版本了不需要指定版本 2修改 application 配置文件 将 feign.httpclient.enabled 的属性值改为 true表明底层使用 httpclient 5、Feign 最佳实践 最佳实践是指企业开发过程中总结设计缺点得出的一种相对比较好的使用方式。 通常会用到 2 种方式各有利弊按自己的需求使用 继承给消费者的 FeignClient 和提供者的 controller 定义统一的父接口然后实现接口比如 order 模块要调用 user 模块的服务就定义 UserClient 接口继承 UserAPI缺点耦合度高优点遵从了契约 抽取将 FeignClient 抽取为独立模块并且把接口有关的 POJO、默认的 Feign 配置都放到这个模块中提供给所有消费者使用缺点消费者可能会引入很多用不到的 api优点耦合度低层次分明 我个人更喜欢第二种抽取的方式下面使用这种方式做一个例子。 1创建 feign-api 模块 在 feign-api 模块中引入 feign 的起步依赖 将消费者模块中对提供者模块所需的 Client、Pojo以及 Config 类都移动到 feign-api 中 2引入 feign-api 模块 在消费者 order-service 模块中引入 feign-api 模块 3消除报错 将 order-service 模块内原来依赖 pojo、config、client 的类修改为 feign-api 模块内的类 由于 order-service 模块的 application 启动类无法扫描到 feign-api 模块下的 Client 的 Bean 对象因此会出现如下报错 需要在 EnableFeignClients 中加入 clients 属性 6、Feign 使用问题汇总 1Did you forget to include spring-cloud-starter-loadbalancer? 出错原因  SpringCloud Feign 在 Hoxton.M2 RELEASED 版本之后不再使用 Ribbon而是使用 spring-cloud-loadbalancer所以在不引入 spring-cloud-loadbalancer 的情况下会报错。 参考了很多解决方法主要是要区别版本问题 在包含 RELEASE 关键字的版本中只有下面这样操作才能使用 首先排除 ribbon 的起步依赖排除位置在消费者依赖的服务提供者的 dependency添加 loadBalancer 依赖 而在 2021 及更新版本中也就是没有 RELEASE 关键字的版本只需要如下操作 引入 loadBalancer 依赖不需要排除 ribbon 的起步依赖 二、Gateway 网关简介 为什么需要网关 如果没有网关那么所有人都可以访问我们所有的服务但是有很多服务其实是不能对外公开的。需要使用网关进行身份验证通过后才能访问敏感服务。一切请求需要先通过网关才能到微服务。 因此网关有如下功能 身份认证和权限校验服务路由、负载均衡也就是能知道将请求送到哪个微服务限制请求流量 SpringCloud 提供了 2 个组件实现网关功能 gateway新版本zuul早期版本 Zuul 是基于 Servlet 的实现属于阻塞式编程。 而 SpringCloudGateway 则是基于 Spring5 中提供的 WebFlux属于响应式编程的实现具备更好的性能。 1、搭建网关服务 1创建 gateway 模块 创建一个新的模块专门用于网关gateway-module需要 SpringBoot 启动类引入 SpringCloudGateway 起步依赖引入 Nacos 服务发现依赖 2编写路由配置以及 Nacos 地址 gateway 中的 routes 属性之前的配置目的是为了让 gateway 将服务注册到 nacosgateway 中的 routes 属性之后的配置指明了可以使用的 service 路由id表示这个路由的名字与其他属性无关uri表示路由目标地址其中 lb 表示负载均衡后面跟着服务的 namepredicates指定路由规则符合规则就可以放行 3测试网关功能 启动 gateway 的 application发起请求localhost:10010/order/queryOrderById/1这个请求中order-service 模块会调用 user-service 的服务 访问失败说明我们的网关起作用了因为我们没有为网关配置 order-service 的路由 添加对 order-service 的服务的路由后就可以从 gateway 访问 order 的服务了 2、路由断言工厂 路由断言工厂 Route Predicate Factory作用是 我们在配置文件中写的 predicates 断言规则只是字符串这些字符串会被 Predicate Factory 读取并解析为路由判断的条件。每种规则都有各自的断言工厂去解析比如 Path 有 PathRoutePredicateFactory 断言工厂 下面以 After 举一个例子 1添加断言规则 After After 断言规则规定在这个时间之后才能进行访问  2访问 order 的服务 发送请求 /order/queryOrderById/1理向情况应该是无法访问 修改断言规则的时间为2020-12-31重启 gateway 模块 再次发起请求就可以访问了 3、路由的过滤器配置 路由过滤器是GatewayFilter。 GatewayFilter 是网关中提供的一种过滤器可以对进入网关的请求和微服务返回的响应做处理。 在这个过程中过滤器就可对请求和响应做出各种各样的处理这样往下游传递的数据中就包含了修改后的信息。 具体有什么样的操作就要看使用哪个过滤器工厂 下面我们以添加一个请求头为例子 1修改 application 配置文件 给 routes 中的一个路由添加 filters 属性filters 中添加- AddRequestHeader[key],[value] 2编写 Controller获取请求头信息 既然在 filter 中设置了 headerorderStatus001那么请求传递到 Controller 后一定可以获取到这个头信息 访问 /order/queryOrderById/1查看控制台输出 3编写默认过滤器 default-filter 如果我们想为所有的请求都添加 header 信息也不需要给每一个路由都写上 filters。 只需要在 routes 同级下添加 default-filter 属性给 default-filter 属性添加- AddRequestHeader[key],[value] 等属性值 访问 /order/queryOrderById/1查看控制台输出 4、全局过滤器 全局过滤器是GlobalFilter。 全局过滤器的作用处理一切进入网关的请求和微服务响应与 GatewayFilter 的作用一样只是作用范围不同。其中GatewayFilter 通过配置定义运行逻辑是固定的。官方定义而 GlobalFilter 的运行逻辑需要自己写代码实现。自定义 需求 定义全局过滤器拦截请求判断请求的参数是否满足下面条件 参数中是否有 authorizationauthorization 参数值是否为 admin如果同时满足则放行否则拦截 1定义实现类 创建 AuthorFilter 实现类实现 GlobalFilter 接口exchange请求上下文里面可以获取Request. Response等信息chain用来把请求委托给下一个过滤器 NonoVoid返回表示当前过滤器业务结束 2定义 filter 方法的运行逻辑 添加 Component添加 Order方便多过滤器时指定顺序网关中采用的都是基于 WebFlux响应式编程的 API因此使用上与 ServletAPI 不同 Order(-1) Component public class AuthorFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数ServerHttpRequest request exchange.getRequest();MultiValueMapString, String params request.getQueryParams();// 2.获取请求参数中的 author 参数值String author params.getFirst(author);// 3.判断是否等于 adminif (author.equalsIgnoreCase(admin)) {// 放行return chain.filter(exchange);}// 4.不相等获取响应ServerHttpResponse response exchange.getResponse();// 4.1.设置状态码401表示未登录response.setStatusCode(HttpStatus.UNAUTHORIZED);// 4.2.拦截请求return response.setComplete();} } 3启动 gateway 的 application 访问 /order/queryOrderById/1/authoradmin111先使用错误的 authon 参数值发现返回了 401 访问 /order/queryOrderById/1/authoradmin使用正确的 authon 参数值可以正常访问 5、过滤器链执行顺序 请求进入网关会碰到三类过滤器当前路由的过滤器、DefaultFilter、GlobalFilter。 请求路由后会将当前路由过滤器和 DefaultFilter、GlobalFilter合并到一个过滤器链集合)中排序后依次执行每个过滤器。 过滤器执行顺序 每一个过滤器都必须指定一个 int 类型的 order 值order 值越小优先级越高执行顺序越靠前GlobalFilter 通过实现 Ordered 接口或者添加 Order 注解来指定 order 值由我们自己指定路由过滤器和 defaultFilter 的 order 由 Spring 官方指定默认是按照声明顺序从 1 递增当过滤器的 order 值一样时会按照 defaultFilter 路由过滤器 GlobalFilter 的顺序执行 6、网关的 cors 跨域配置 由于一些页面可能需要从微服务中获取某些数据此时需要发起 AJAX 请求那么这就可能属于跨域请求的范畴。一般我们的 web 页面端口都不会与微服务的相同所以请求基本上都是跨域请求 跨域请求不需要在微服务中处理只需要在网关中处理即可。 跨域域名不一致就是跨域主要包括 域名不同www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com域名相同端口不同localhost:8080 和 localhost:8081 跨域问题的 2 个要素 浏览器、服务端浏览器禁止请求向服务端发起跨域 ajax 请求请求会被拦截解决方案CORS 需求 使用 localhost:8090 发起请求8090 发送的是 AJAX 的 GET 请求。8090 发起的 AJAX 请求需要通过网关在 AJAX 的目标地址中要用 10010 端口 1编写 gateway 的配置文件 各个属性的作用都写在注释中了 2端口 8090 的 AJAX 请求 这里使用 JQuery 发起 AJAX 请求传递参数为 authoradmin这里参数是必须传递的因为发起的请求目标地址是要通过网关的需要鉴权 headmeta charsetUTF-8titleTitle/titlescript typetext/javascript srcJQuery-3.7.0.js/scriptscript typetext/javascript$(function() {$(#ajaxButton).click(function() {$.ajax({url:http://localhost:10010/order/queryOrderById/1,data: {author : admin},type: get,dataType: json,success: function(data) {console.log(data);}});});});/script /head bodya hrefhttp://localhost:10010/order/queryOrderById/1?authoradmin 发起普通GET请求 /ainput idajaxButton typebutton value发起 ajax 请求/ /body 发起请求可以在控制台看到返回的数据 而如果我们用 a 来请求是会跳转到 10010 得页面的这就不算跨域请求了 7、Gateway 网关使用问题汇总 1搭建网关服务时报错 503 这是因为在 Spring Cloud 2020 版本以后默认移除了对 Netflix 的依赖其中就包括 Ribbon官方默认推荐使用 Spring Cloud Loadbalancer 正式替换 Ribbon并成为了 Spring Cloud 负载均衡器的唯一实现。 Loadbalancer 依赖
http://www.pierceye.com/news/952690/

相关文章:

  • 泰安有口碑的企业建站公司二手汽车手机网站模板
  • 网站百度快照怎么做网站调用谷歌地图
  • 扫描二维码进入公司网站怎样做代做关键词收录排名
  • flash美食网站论文架设一个网站需要多少钱
  • 做教育视频网站用什么平台好wordpress文章 代码块
  • 网站 部署 域名深圳网站建设yuntianxia
  • 做调查的网站推荐移动端网站开发教程
  • 上海品牌网站建设公司排名女生学网络营销这个专业好吗
  • 优质的邵阳网站建设企业邮箱免费登录入口
  • 网站做seo多少钱wordpress点击分类目录空白
  • 黄埔网站建设 信科网络中国企业商铺网
  • 济南快速网站排名网站开发模板系统
  • 厦门市app开发网站建设公司亚马逊雨林在地图上的位置
  • qq空间个人网站网页设计作业个人简历代码怎么写
  • 宁波网站建设团队微信网页制作的软件
  • 社区网站推广方案百度直播推广
  • 上海网站seo诊断吉林网站优化
  • 玉田网站建设做重视频网站
  • 发放淘宝优惠券的网站怎么做网站建设理论依据
  • 信用渭南网站建设做网站实例
  • 南通做百度网站的公司哪家好公司网站建站流程
  • 北京微信网站建设费用知识问答网站开发
  • 网站建设的博客做外国网用哪些网站
  • 网站两侧广告口碑营销的案例及分析
  • 有什么手机网站wordpress 编辑器增加翻译按钮
  • 深圳网站建设企怎样做好公司网站
  • 深圳注册投资公司的条件网络优化推广公司
  • 网站流量统计工具有哪些电子商务网络营销是什么
  • asp+access网站开发实例精讲网站建设开发的主要流程
  • 电子商城开发网站建设做网站推广怎么跟客户沟通