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

广州网站开发棋牌俄罗斯网络公司排名

广州网站开发棋牌,俄罗斯网络公司排名,企业系统管理软件,网络科技公司logoRibbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时#xff0c;重试等。简单的说#xff0c;就是在配置文件中列出Load Balancer…Ribbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时重试等。简单的说就是在配置文件中列出Load Balancer 后面的所有的及其Ribbon会自动的帮助你基于某种规则如简单轮询随机连接等去连接这些机器。我们很容易使用 Ribbon 实现自定义的负载均衡算法 Feign 的介绍 Feign 和 Ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件Ribbon 和 Feign 都是用于调用其他服务的方式不同Feign 则是在 Ribbon 的基础上进行了一次改进采用接口的方式将需要调用的其他服务的方法定义成抽象方法即可不需要自己构建 Http 请求不过要注意的是抽象方法的注解方法名要和提供服务的方法对应上。简单点说Feign 是对 Ribbon 的封装而且 Feign 和 Ribbon 的作用位置不同。 负载均衡 Ribbon 和 Feign 都是负载均衡技术那么什么是负载均衡呢简单点说负载均衡就是将用户的请求平摊的分配到多个服务上从而达到系统的高可用。 Nginx 服务端负载均衡和 Ribbon 本地负载均衡的区别 Nignx 是服务器负载均衡客户端所有的请求都会交给 Nginx 然后由 Nginx 实现转发请求即负载均衡是由服务端实现的。 Ribbon 本地负载均衡在调用微服务接口时候会在注册中心上获取注册信息服务列表之后缓存到 VM 本地从而在本地实现 RPC 远程服务调用技术。 Ribbon 和 Feign 的区别 启动类使用的注解不同Ribbon 用的是 RibbonClientFeign 用的是 EnableFeignClients 。服务的指定位置不同Ribbon 是在 RibbonClient 注解上声明Feign 则是在定义抽象方法的接口中service 层的接口上使用 FeignClient 声明。调用方式不同Ribbon 需要自己构建 http 请求模拟 http 请求然后使用 RestTemplate 发送给其他服务步骤相当繁琐Feign 是直接通过接口方式调用。 Ribbon 的使用 项目是建立在springcloud技术篇一 Nacos 的基础上进行的。Ribbon 只是一个客户端的负载均衡器工具实现起来非常简单我们只需要注入 RestTemplate 的 Bean 上加上 LoadBalanced 就可以了内容如下 Configuration public class WebConfig {public RestTemplate restTemplate() {LoadBalanced//负载均衡,默认使用轮询规则Beanreturn new RestTemplate();} }补充在早期版本中spring-cloud-starter-netflix-eureka-client 依赖已经引入了 Ribbon则我们可以直接使用但是因为自从 SpringCloud2020.0.1.0 版本是已经不需要 netflix 了所以如果我们使用的是最新版本的 springcloud则需要手动在服务消费方导入 spring-cloud-starter-loadbalancer 依赖支持 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactIdversion3.1.1/version /dependency启动一个消费方多个服务放进行测试 先去修改 springcloud-alibaba-microservice-consumer 工程中的 UserController然后启动即可 RestController RequestMapping(user-consumer) public class UserController {Autowiredprivate DiscoveryClient discoveryClient;//服务发现Autowiredprivate RestTemplate restTemplate;//用于发送网络请求// 服务方应该调用生产方的服务RequestMapping(getUsers)public JsonResult getUsers() {// 由于在 WebConfig 中设置了轮询规则这里通过服务的名称来发送网络请求String url http://micro-service-provider/user-provider/findAll;JsonResult jsonResult restTemplate.getForObject(url,JsonResult.class);System.out.println(jsonResult);return jsonResult;} }修改 springcloud-alibaba-microservice-provider 工程中的 UserController RestController RequestMapping(user-provider) public class UserController {RequestMapping(findAll)public JsonResult findAll() {// 使用并联启动的方式启动多个服务提供方进行测试// 先输出 7070然后修改 application.yml 配置文件端口号设置为 7070 启动// System.out.println(7070)// 在输出 7071然后修改 application.yml 配置文件端口号设置为 7071 启动// System.out.println(7071)// 在输出 7072然后修改 application.yml 配置文件端口号设置为 7072 启动// System.out.println(7072)// 模拟数据库数据ListUser users Arrays.asList(new User(1001, 张三, 123),new User(1002, 李四, 456),new User(1003, 王五, 789),);JsonResult jsonResult JsonResult.ok();jsonResult.setData(users);return jsonResult;} }设置 springcloud-alibaba-microservice-provider 工程多次启动 修改端口号启动多个 provider然后启动 consumer访问浏览器进行测试 负载均衡的策略 Ribbon 提供了一个很重要的接口叫做 IRule其中定义了很多的负载均衡策略默认的是轮询的方式一下是 Ribbon 的负载均衡策略 改变 Ribbon 的均衡策略随机方式 Configuration public class WebConfig {LoadBalanced//负载均衡Beanpublic RestTemplate restTemplate() {return new RestTemplate();}// 创建对象实现改变 Ribbon 的负载均衡策略随机规则Beanpublic IRule getRule() {return new RandomRule();} }自定义方式的均衡策略 自定义的负载均衡策略需要继承 AbstractLoadBalancerRule 这个类然后重写 choose 方法然后将其注入到容器中。 创建 ServerInfo 类 public class ServerInfo {private Server server;private int num;public ServerInfo() {}public ServerInfo(Server server, int num) {this.server server;this.num num;}public Server getServer() {return server;}public void setServer(Server server) {this.server server;}public int getNum() {return num;}public void setNum(int num) {this.num num;} }创建 CustomizeRule 类 // 自定义规则每个服务最多访问 5 次然后再继续访问下一个 public class CustomizeRule extends AbstractLoadBalancerRule {private int limit 3;// map 的 key 是服务的名字value 是该服务调用的次数private MapString, ServerInfo map new ConcurrentHashMap();Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig){}// 返回值的意思是当该方法返回什么的时候那么 Ribbon 或者 Feign 就调用谁。Overridepublic Server choose(Object key) {Server finalServer null;ILoadBalancer loadBalancer getLoadBalancer();// 获取所有的服务ListServer servers loadBalancer.getAllServers();// 获取所有的可用的服务ListServer reachableServers loadBalancer.getReachableServers();int allServiceSize servers.size(); // 获取所有服务的长度int upCount reachableServers.size(); // 获取所有的可用的服务的长度if(0 allServicesSize || 0 upCount) {return null;}for(int i 0; i allServiceSize; i) {Server server servers.get(i);//获取当前遍历的 serverString instanceId server.getMetaInfo().getInstanceId();String providerName instanceId.split()[1];//获取服务名ServerInfo serverInfo map.get(providerName);//获取对应服务// 首次调用if(null serverInfo) {serverInfo new ServerInfo(server, 1);map.put(providerName, serverInfo);finalServer server;break;} else {// 不为空表示之前肯定调用过// 当前遍历的 server 与正在调用的 server 是同一个 serverif(serverInfo.getServer().getId().equals(server.getId())) {// 如果没有满 3 次接着走该服务。// 如果满了 3 次接着下个int num serverInfo.getNum();//获取已经调用的次数if(num limit) {// 超出了 3 次// 超出次数要走下一个需要判断是否有下一个需要判断是否有下一个如果没有下一个就回到第一个if(i (allServiceSize - 1)) {Server firstServer servers.get(0);//如果为最后一个就拿第一个ServerInfo firstServerInfo new ServerInfo(firstServer, 1);map.put(providerName, firstServerInfo);finalServer firstServer;} else {Server nextServer servers.get(i 1);map.put(providerName, nextServerInfo);finalServer nextServer;}break;} else {serverInfo.setNum(num);finalServer server;break;}}}}return finalServer;} }修改 WebConfig 添加配置 Configuration public class WebConfig {BeanLoadBalanced//负载均衡,默认规则:轮询public RestTemplate getRestTemplate() {return new RestTemplate();}// 自定义均衡负载服务器Beanpublic IRule getRule() {return new CustomizeRule();} }Feign 的使用 在 springcloudalibaba-micro-service-consumer 的 pom.xml 中导入依赖 !-- Feign -- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.6.RELEASE/version /dependency在启动类上加入 EnableFeignClients 的注解 SpringBootApplication EnableDiscoveryClient EnableFeignClients public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);} }创建UserService Service FeignClient(micro-service-provider) public interface UserService {RequestMapping(/user-provider/findAll)public JsonResult findAll(); }创建 FeignUserController RestController RequestMapping(feign) public class FeignUserController {Autowiredprivate UserService userService;RequestMapping(findAll)public JsonResult findAll() {return userService.findAll();} }启动多个 provider然后启动 consumer访问 http://localhost:8080/feign/findAll 进行测试 在 Feign 的基础上的服务之间的传参 在 springcloudalibaba-micro-service-provide 工程中的 UserController 添加 CRUD 方法 RestController RequestMapping(user-provider) public class UserController {RequestMapping(findAll)public JsonResult findAll(){//使用并联启动的方式启动多个服务提供方进行测试//先输出7070然后修改application.yml配置文件端口设置为7070启动//System.out.println(7070);//再输出7071然后修改application.yml配置文件端口设置为7071启动System.out.println(7071);//再输出7072然后修改application.yml配置文件端口设置为7072启动//System.out.println(7072);ListUser users Arrays.asList(new User(1001, 张三, 123),new User(1002, 李四, 456),new User(1003, 王五, 789));JsonResult jsonResult JsonResult.ok();jsonResult.setData(users);return jsonResult;}//模拟数据库操作//查询单个GetMapping(findById)public JsonResult findById(RequestParam(id) Integer id){User user new User(id, jack, 123);JsonResult jsonResult JsonResult.ok();jsonResult.setData(user);return jsonResult;}//删除单个-restful风格的开发DeleteMapping(deleteById/{id})public JsonResult deleteById(PathVariable(id) Integer id){System.out.println(deleteByIdid);return JsonResult.ok();}//添加PostMapping(addUser)public JsonResult addUser(RequestBody User user){System.out.println(addUseruser);return JsonResult.ok();}//修改 如果参数不一致 RequestParam(value )PutMapping(updateUser)public JsonResult updateUser(RequestParam Integer id,RequestParam String username,RequestParam String password){System.out.println(updateUserid--username--password);return JsonResult.ok();} }在 springcloudalibaba-micro-service-consumer 工程中的 UserService 添加对应方法 Service FeignClient(micro-service-provider) public interface UserService {RequestMapping(/user-provider/findAll)public JsonResult findAll();//模拟数据库操作//查询单个GetMapping(/user-provider/findById)public JsonResult findById(RequestParam(id) Integer id);//删除单个DeleteMapping(/user-provider/deleteById/{id})public JsonResult deleteById(PathVariable(id) Integer id);//添加PostMapping(/user-provider/addUser)public JsonResult addUser(RequestBody User user);//修改PutMapping(/user-provider/updateUser)public JsonResult updateUser(RequestParam Integer id,RequestParam String username,RequestParam String password);}在 springcloudalibaba-micro-service-consumer 工程中的 FeignUserController 添加对应方法 RestController RequestMapping(feign) public class FeignUserController {Autowiredprivate UserService userService;RequestMapping(findAll)public JsonResult findAll(){return userService.findAll();}//模拟数据库操作//查询单个GetMapping(findById)public JsonResult findById(RequestParam(id) Integer id){return userService.findById(id);}//删除单个DeleteMapping(deleteById/{id})public JsonResult deleteById(PathVariable(id) Integer id){return userService.deleteById(id);}//添加 使用requestbody注解前端需要传送JSON数据PostMapping(addUser)public JsonResult addUser(User user){return userService.addUser(user);}//修改PutMapping(updateUser)public JsonResult updateUser(RequestParam Integer id,RequestParam String username,RequestParam String password){return userService.updateUser(id,username,password);} }
http://www.w-s-a.com/news/287705/

相关文章:

  • 企业如何在自己的网站上做宣传外贸自建站可以自己做网站吗
  • 甘肃网站建设制作商网站空间哪家公司的好
  • 思途旅游网站建设系统用vscode做网站
  • 广州站改造最新消息半年工作总结ppt模板
  • logo模板下载网站推荐哪家网站开发培训好
  • 做外贸网站效果图页面关键词优化
  • 广平网站建设成都活动轨迹
  • 小型网站网站建设需要网络公司是什么行业
  • 滑动 手机网站 代码网页制作与设计讨论
  • 自己做网站处理图片用什么软件wordpress html5支持
  • 校园网站怎么建软文文案范文
  • 中国建设官方网站如何创建自己的软件
  • 来宾住房与城乡建设网站天津西青区怎么样
  • 西安网站建设培训班鄂州网页定制
  • 西部数码网站备份自己怎么做网站啊
  • h5网站开发用什么软件制作公司网站建设代理怎么做
  • 网站建设资料准备网上购物app有哪些
  • 沧州做网站优化哪家公司便宜国内百度云网站建设
  • 网站的最近浏览 怎么做龙岩市人才网最新招聘信息
  • 网站建设需要找工信部吗网站开发账务处理
  • 做那种的视频网站个体工商网站备案
  • 推广网官方推广网站中国建设招聘信息网站
  • 医院网站建设需要多少钱网络营销渠道可分为哪几种
  • 怎么取网页视频网站元素计算机专业论文网站开发
  • 上海网站建设备案号怎么恢复wordpress打开页面空白
  • 30个做设计的网站企业设计网站
  • 招生网站开发的背景创意 wordpress
  • 网站备案资料查询小型企业管理系统软件
  • 温州网站建设维护怎么做好网站开发、设计
  • 佛山 做网站公司有哪些网站排名忽然不见了