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

建设银行网站建设情况室内设计培训哪个机构比较好

建设银行网站建设情况,室内设计培训哪个机构比较好,wordpress最详细的教程视频,wordpress一键安装空间内容简介 在项目开发中,除了考虑正常的调用之外,负载均衡和故障转移也是关注的重点,这也是feign ribbon的优势所在,基于上面两篇文章的基础,接下来我们开展最后一篇原生态fegin结合ribbon服务进行服务远程调用且实现负…

内容简介

在项目开发中,除了考虑正常的调用之外,负载均衡和故障转移也是关注的重点,这也是feign + ribbon的优势所在,基于上面两篇文章的基础,接下来我们开展最后一篇原生态fegin结合ribbon服务进行服务远程调用且实现负载均衡机制,也帮助大家学习ribbon奠定基础。

maven依赖

<dependencies><dependency><groupId>com.netflix.feigngroupId><artifactId>feign-coreartifactId><version>8.18.0version>dependency><dependency><groupId>com.netflix.feigngroupId><artifactId>feign-jacksonartifactId><version>8.18.0version>dependency><dependency><groupId>com.netflix.feigngroupId><artifactId>feign-ribbonartifactId><version>8.18.0version>dependency><dependency><groupId>com.netflix.archaiusgroupId><artifactId>archaius-coreartifactId>
dependency>dependencies>
复制代码

其中feign-core和feign-ribbon是必须的,如果需要在服务消费端和服务生产端之间进行对象交互,建议使用feign-jackson

配置读取

import com.netflix.config.ConfigurationManager;
import feign.Feign;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import feign.ribbon.RibbonClient;
public class AppRun {public static void main(String[] args) throws Exception {User param = new User();param.setUsername("test");RemoteService service = Feign.builder().client(RibbonClient.create()).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).options(new Options(1000, 3500)).retryer(new Retryer.Default(5000, 5000, 3)).target(RemoteService.class, "http://remote-client/gradle-web");for (int i = 1; i 10; i++) {User result = service.getOwner(param);System.out.println(result.getId() + "," + result.getUsername());}}
}
复制代码
  • 声明了一个User类型的对象param,该对象将作为参数被发送至服务生产端。
  • 重点在于通过RibbonClient.create()使得Feign对象获得了Ribbon的特性。之后通过encoder,decoder设置编码器与解码器,并通过target方法将之前定义的接口RemoteService与一个URL地址http://remote-client/gradle-web进行了绑定。

现在来看remote-client.properties中的配置项,主要多是RemoteClient的配置机制

remote-client.ribbon.MaxAutoRetries=1
remote-client.ribbon.MaxAutoRetriesNextServer=1
remote-client.ribbon.OkToRetryOnAllOperations=true
remote-client.ribbon.ServerListRefreshInterval=2000
remote-client.ribbon.ConnectTimeout=3000
remote-client.ribbon.ReadTimeout=3000
remote-client.ribbon.listOfServers=127.0.0.1:8080,127.0.0.1:8085
remote-client.ribbon.EnablePrimeConnections=false
复制代码

所有的key都以remote-client开头,表明这些配置项作用于名为remote-client的服务。其实就是与之前绑定RemoteService接口的URL地址的schema相对应。

重点看remote-client.ribbon.listOfServers配置项,该配置项指定了服务生产端的真实地址。

在调用时会被替换为:

@RequestLine指定的地址进行拼接,得到最终请求地址。本例中最终请求地址为:

由于使用的ribbon,所以feign不再需要配置超时时长,重试策略。ribbon提供了更为完善的策略实现。

本例中,服务生产端是一个简单的springMvc,实现如下:


public class UserController {public User list( User user) throws InterruptedException{HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();user.setId(new Long(request.getLocalPort()));user.setUsername(user.getUsername().toUpperCase());return user;}
}复制代码

故障转移是通过remote-client.properties中的配置项进行配置。

  • 首先利用archaius项目的com.netflix.config.ConfigurationManager读取配置文件remote-client.properties,该文件位于src/main/resources下。

负载均衡的策略又是如何设置呢?

import com.netflix.client.ClientFactory;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.RandomRule;
import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
import feign.Feign;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import feign.ribbon.LBClient;
import feign.ribbon.LBClientFactory;
import feign.ribbon.RibbonClient;
public class AppRun {public static void main(String[] args) throws Exception {ConfigurationManager.loadPropertiesFromResources("remote-client.properties");User param = new User();param.setUsername("test");RibbonClient client = RibbonClient.builder().lbClientFactory(new LBClientFactory() {public LBClient create(String clientName) {IClientConfig config = ClientFactory.getNamedConfig(clientName);ILoadBalancer lb = ClientFactory.getNamedLoadBalancer(clientName);ZoneAwareLoadBalancer zb = (ZoneAwareLoadBalancer) lb;zb.setRule(new RandomRule());return LBClient.create(lb, config);}}).build();RemoteService service = Feign.builder().client(client).encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).options(new Options(1000, 3500)).retryer(new Retryer.Default(5000, 5000, 3)).target(RemoteService.class, "http://remote-client/gradle-web");for (int i = 1; i 10; i++) {User result = service.getOwner(param);System.out.println(result.getId() + "," + result.getUsername());}}
}
复制代码
private IRule zoneAvoidanceRule() {return new ZoneAvoidanceRule();}private IRule randomRule() {return new RandomRule();}
复制代码

不再使用RibbonClient.create()来创建默认的RibbonClient,而是通过RibbonClient.builder()获得feign.ribbon.Builder,进而设置LBClientFactory的实现来定制LBClient,在创建LBClient的过程中即可指定负载策略的具体实现。

分享资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tay3QQq8-1691467722037)(https://pic.imgdb.cn/item/64d0dc6a1ddac507cc857b30.png)]
获取以上资源请访问开源项目 点击跳转

http://www.yidumall.com/news/50338.html

相关文章:

  • 网站默认图百度云官网登录入口
  • 网站委托书找谁做seo交流中心
  • 网站建设案例百度云惠州seo排名外包
  • 力杨网站建设如何做网站优化seo
  • 室内设计师证书哪个含金量高知名的seo快速排名多少钱
  • 网站的制作成品各类资源关键词
  • 威海住房和城乡建设局网站首页外贸平台排行榜前十名
  • 绵阳做网站厦门人才网
  • 毕业设计做网站难吗天津网站建设技术外包
  • 钦州公司做网站指数基金怎么买
  • 做调查赚钱哪些网站最靠谱关键词推广价格
  • 网站的维护怎么做百度搜索推广技巧
  • 备案 网站名称怎么写石家庄seo网站排名
  • 朔城网站制作sem公司
  • 优化网站排名公司全网营销推广 好做吗
  • 网站维护中页面设计湖南网站制作哪家好
  • 注册城乡规划师挂靠费seo查询工具网站
  • 安徽中色十二冶金建设有限公司网站如何做企业网站
  • wordpress 响应式布局seo推广要多少钱
  • 焦作做微信网站多少钱营销型网站外包
  • 蓝色系网站设计营销型网站建设需要多少钱
  • 怎么用织梦模板做网站线上营销公司
  • 响应式网站开发软件苏州seo关键词排名
  • 亚马逊卖家可以做促销的网站淘宝店铺推广方式有哪些
  • 长沙网站设计优刻好搜自然seo
  • wordpress 站点地址(url)网站建设与维护
  • 周口网站建设专家女装标题优化关键词
  • 室内设计找图片的网站有道搜索引擎入口
  • 企业策划案例搜索seo神器
  • Spring做网站和什么北京谷歌seo公司