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

可视化网站建设wordpress调用上传图片

可视化网站建设,wordpress调用上传图片,建设一个门户网站,宁波网页制作设计营销目录资源隔离使用资源隔离的好处基于Hystrix实现微服务中资源隔离基于Hystrix线程池隔离实现资源隔离利用 HystrixCommand 获取单条数据利用 HystrixObservableCommand 批量获取数据基于 Hystrix 信号量机制实现资源隔离资源隔离 资源隔离是什么#xff1f; 资源隔离是指把对… 目录资源隔离使用资源隔离的好处基于Hystrix实现微服务中资源隔离基于Hystrix线程池隔离实现资源隔离利用 HystrixCommand 获取单条数据利用 HystrixObservableCommand 批量获取数据基于 Hystrix 信号量机制实现资源隔离资源隔离 资源隔离是什么 资源隔离是指把对某一个依赖服务的所有调用请求全部隔离在同一份资源池内不会去用其它资源了。哪怕对这个依赖服务比如说商品服务现在同时发起的调用量已经到了 1000但是分配给商品服务线程池内就 10 个线程最多就只会用这 10 个线程去执行。不会因为对商品服务调用的延迟将 Tomcat 内部所有的线程资源全部耗尽。   使用资源隔离的好处 合理分配资源把给资源分配的控制权交给用户。多个微服务之间进行调用的时候假设服务A调用服务B和服务C服务B和服务C又调用其他微服务这就是所谓的扇出如果扇出的链路上某个微服务的调用响应时间过长如线程阻塞了容器中的线程数量就则会持续增加这个时候服务A占用的线程资源越来越多进而引起系统奔溃这就是“雪崩效应”资源隔离能够在一定程度上防止微服务的雪崩效应。对依赖调用进行封装有利于对调用的监控和分析类似于hystrix-dashboard的使用。 基于Hystrix实现微服务中资源隔离 Hystrix是Netflix开源的一款容错框架包含常用的容错方法线程隔离、信号量隔离、服务降级、服务熔断。 Hystrix有一项比较核心的功能就是所谓的资源隔离资源隔离要解决的核心问题就是将多个依赖服务的调用分别隔离到各自的资源池中避免某一个依赖服务的调用因为依赖服务的接口调用的延迟或者失败导致所有的线程资源全部耗费在这个服务的接口调用上一旦某个服务的线程资源全部耗尽就可能导致雪崩效应。 Hystrix实现资源隔离主要有两种隔离方式 线程池隔离信号量隔离 基于Hystrix线程池隔离实现资源隔离 Hystrix进行资源隔离其实是提供了一个抽象叫做Command。这个也是Hystrix最基本的资源隔离技术。   利用 HystrixCommand 获取单条数据 我们通过将调用商品的服务操作封装在HystrixCommand中并限定一个key比如下面的GetProductInfoCommandGroup,在这里我们可以简单认为是一个线程池每次调用商品服务就只会用该线程池中的资源不会再去用其他的资源了。 public class GetProductInfoCommand extends HystrixCommandProductInfo {private Long productId;public GetProductInfoCommand(Long productId) {super(HystrixCommandGroupKey.Factory.asKey(GetProductInfoCommandGroup));this.productId productId;}Overrideprotected ProductInfo run() {String url http://localhost:8081/getProductInfo?productId productId;// 调用商品服务接口String response HttpClientUtils.sendGetRequest(url);return JSONObject.parseObject(response, ProductInfo.class);} } 我们在接口中根据 productId 创建 Command 并执行获取到商品数据。 RequestMapping(/getProductInfo) ResponseBody public String getProductInfo(Long productId) {HystrixCommandProductInfo getProductInfoCommand new GetProductInfoCommand(productId);// 通过command执行获取最新商品数据ProductInfo productInfo getProductInfoCommand.execute();System.out.println(productInfo);return success; }上面执行的方法是execute()方法这个方法是同步的。 我们也可以调用command.queue()方法它将command放入线程池的一个等待队列中然后理解返回后面可以继续做其他一些事情然后过一段时间对Future调用get方法获取数据这是异步的。     利用 HystrixObservableCommand 批量获取数据 只要是获取商品数据全部都绑定到同一个线程池里面去我们通过 HystrixObservableCommand 的一个线程去执行而在这个线程里面批量把多个 productId 的 productInfo 拉回来。 public class GetProductInfosCommand extends HystrixObservableCommandProductInfo {private String[] productIds;public GetProductInfosCommand(String[] productIds) {// 还是绑定在同一个线程池super(HystrixCommandGroupKey.Factory.asKey(GetProductInfoGroup));this.productIds productIds;}Overrideprotected ObservableProductInfo construct() {return Observable.unsafeCreate((Observable.OnSubscribeProductInfo) subscriber - {for (String productId : productIds) {// 批量获取商品数据String url http://localhost:8081/getProductInfo?productId productId;String response HttpClientUtils.sendGetRequest(url);ProductInfo productInfo JSONObject.parseObject(response, ProductInfo.class);subscriber.onNext(productInfo);}subscriber.onCompleted();}).subscribeOn(Schedulers.io());} } 在缓存服务接口中根据传来的 id 列表比如是以 , 分隔的 id 串通过上面的 HystrixObservableCommand执行 Hystrix 的一些 API 方法获取到所有商品数据。 public String getProductInfos(String productIds) {String[] productIdArray productIds.split(,);HystrixObservableCommandProductInfo getProductInfosCommand new GetProductInfosCommand(productIdArray);ObservableProductInfo observable getProductInfosCommand.observe();observable.subscribe(new ObserverProductInfo() {Overridepublic void onCompleted() {System.out.println(获取完了所有的商品数据);}Overridepublic void onError(Throwable e) {e.printStackTrace();}/*** 获取完一条数据就回调一次这个方法* param productInfo*/Overridepublic void onNext(ProductInfo productInfo) {System.out.println(productInfo);}});return success; }基于 Hystrix 信号量机制实现资源隔离 信号量的资源隔离只是起到一个开关的作用比如服务 A 的信号量大小为 10那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A其它的请求都会被拒绝从而达到资源隔离和限流保护的作用。 线程池隔离技术是用 Hystrix 自己的线程去执行调用并不是去控制tomcat容器的线程Hystrix线程池满后Tomcat的线程不会因为依赖服务的接口调用延迟或者故障而被阻塞不会卡死在哪里可以去做其他事情。 Hystrix信号量隔离是控制Tomcat容器中的线程数信号量有多少就允许多少个Tomcat线程通过它然后去执行。 信号量的是什么场景呢 举个栗子。一般我们在获取到商品数据之后都要去获取商品是属于哪个地理位置、省、市、卖家等可能在自己的纯内存中比如就一个 Map 去获取。对于这种直接访问本地内存的逻辑比较适合用信号量做一下简单的隔离。 优点在于不用自己管理线程池啦不用 care timeout 超时啦也不需要进行线程的上下文切换啦。信号量做隔离的话性能相对来说会高一些。 假如这是本地缓存我们可以通过 cityId拿到 cityName。 public class LocationCache {private static MapLong, String cityMap new HashMap();static {cityMap.put(1L, 北京);}/*** 通过cityId 获取 cityName** param cityId 城市id* return 城市名*/public static String getCityName(Long cityId) {return cityMap.get(cityId);} } 写一个 GetCityNameCommand策略设置为信号量。run () 方法中获取本地缓存。我们目的就是对获取本地缓存的代码进行资源隔离。 public class GetCityNameCommand extends HystrixCommandString {private Long cityId;public GetCityNameCommand(Long cityId) {// 设置信号量隔离策略super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(GetCityNameGroup)).andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE)));this.cityId cityId;}Overrideprotected String run() {// 需要进行信号量隔离的代码return LocationCache.getCityName(cityId);} }在接口层通过创建 GetCityNameCommand传入 cityId执行 execute () 方法那么获取本地 cityName 缓存的代码将会进行信号量的资源隔离。 RequestMapping(/getProductInfo) ResponseBody public String getProductInfo(Long productId) {HystrixCommandProductInfo getProductInfoCommand new GetProductInfoCommand(productId);// 通过command执行获取最新商品数据ProductInfo productInfo getProductInfoCommand.execute();Long cityId productInfo.getCityId();GetCityNameCommand getCityNameCommand new GetCityNameCommand(cityId);// 获取本地内存(cityName)的代码会被信号量进行资源隔离String cityName getCityNameCommand.execute();productInfo.setCityName(cityName);System.out.println(productInfo);return success; }
http://www.hkea.cn/news/14565669/

相关文章:

  • 网站托管一年多少钱网站建设的想法和意见
  • 免费素材网站psd富阳网站建设 优帮云
  • 张家界公司网站建设seo提升排名
  • 网站建设的cms系统学做电影网站
  • 怎么学好网站建设华为软件开发工程师待遇
  • 长沙官网网站制作公司学习网站建设难吗
  • 做网站标志过程中美贸易最新消息
  • 松江网站建设品划网络常用软件开发平台
  • 哪里可以免费申请空间 注册域名 申请网站旅游网站建设服务对象
  • 培训网站建设报价单网站的title
  • 网站运营的案例WordPress笑模板
  • 一站式平台网站开发技术wordpress乐器模版
  • 公明网站建设公司成都十八个网红打卡地
  • 宿州网站网站建设网站优化公司上海
  • 求网站备案照片使用iis搭建网站
  • 网站分页符怎么做湖南营销网站建设联系方式
  • .net电商网站开发书画网站模板asp
  • 海拉尔网站建设 网站设计wordpress做物流网站
  • 网站建设 部署与发布视频如何注册属于自己的网站
  • wordpress分类显示自己网站做优化的有权利卖么
  • dedecms的网站系统设计结论封丘县建设银行网站
  • 网站制作厂家电话多少网站域名备案流程
  • 无忧网络网站建设专门做校招的网站
  • 免费建论坛网站网站打开速度变慢
  • 有公网ip 如何做一网站微营销平台有哪些
  • 手机seo网站推广好网站制作
  • 老网站做成适合手机端的网站怎么做杭州模板网站建设
  • 嘉兴自助建站模板如何添加网站 ico
  • 有没有能用的网站无锡网站开发公司电话
  • 门户网站建设总结wordpress纪念册主题