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

上海做网站哪家正规网站建设兰州

上海做网站哪家正规,网站建设兰州,搜索引擎优化的作用是什么,申请网站的域名系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 文章目录 系列文章目录[TOC](文章目录) 前言1、负载均衡1.1、服务端负载均衡1.2、…

系列文章目录

第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon

在这里插入图片描述


文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 1、负载均衡
    • 1.1、服务端负载均衡
    • 1.2、客户端负载均衡
  • 2、Ribbon实现服务间调用
    • 2.1、pom.xml配置
    • 2.2、application.yml配置
    • 2.3、bean配置类
    • 2.4、编写调用Eureka的代码
      • 2.4.1、定义用户服务接口
      • 2.4.2、编写用户服务实现类
      • 2.4.3、编写用户服务控制层代码
      • 2.4.4、统一返回结果
      • 2.4.5、统一异常处理
    • 2.5、启动项目,访问接口
      • 2.5.1、启动项目
      • 2.5.2、访问接口
  • 总结

前言

Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务调用。

今天我们以电商微服务为例,来讲解Eureka 、Ribbon在微服务治理方面的实战应用。
在这里插入图片描述
在这里插入图片描述

1、负载均衡

负载均衡(Load Balance) ,简单点说就是将用户的请求平摊分配到多个服务器上运行,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。
常见的负载均衡方式有两种:服务端负载均衡、客户端负载均衡

1.1、服务端负载均衡

在这里插入图片描述

1.2、客户端负载均衡

在这里插入图片描述

2、Ribbon实现服务间调用

Ribbon 可以与 RestTemplate(Rest 模板)配合使用,以实现微服务之间的调用
示例:
建立C端API工程customer-api

2.1、pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.hqyj</groupId><artifactId>SpringCloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>customer-api</artifactId><name>customer-api</name><description>customer-api</description><properties><java.version>1.8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--devtools 开发工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--Spring Boot 测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--junit 测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- 修改后立即生效,热部署 --><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId><version>1.2.8.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>com.hqyj</groupId><artifactId>common-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>

2.2、application.yml配置

server:port: 80eureka:client:register-with-eureka: false #本微服务为服务消费者,不需要将自己注册到服务注册中心fetch-registry: true  #本微服务为服务消费者,需要到服务注册中心搜索服务service-url:defaultZone: http://localhost:7001/eureka

2.3、bean配置类

配置RestTemplate、开启负载均衡

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/**** @title bean配置类* @desctption 配置RestTemplate、开启负载均衡* @author kelvin* @create 2023/5/11 14:33**/
@Configuration
public class ConfigBean {@Bean //将 RestTemplate 注入到容器中@LoadBalanced //在客户端使用 RestTemplate 请求服务端时,开启负载均衡(Ribbon)public RestTemplate getRestTemplate() {return new RestTemplate();}
}

2.4、编写调用Eureka的代码

2.4.1、定义用户服务接口

import com.hqyj.common.model.UserInfo;
import java.util.List;/**** @title 用户服务 接口* @desctption 用户服务* @author kelvin* @create 2023/5/11 14:22**/
public interface UserConsumerService {/*** 获取用户信息列表* @return*/public List<UserInfo> userInfoList();}

2.4.2、编写用户服务实现类

import com.hqyj.common.model.UserInfo;
import com.hqyj.customerapi.service.UserConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.List;/**** @title 用户服务 实现类* @desctption 用户服务* @author kelvin* @create 2023/5/11 14:22**/
@Service
public class UserConsumerServiceImpl implements UserConsumerService {private String REST_URL_PROVIDER_PREFIX = "http://USER-SERVICE";@Autowiredprivate RestTemplate restTemplate;/*** 获取用户信息列表* @return*/@Overridepublic List<UserInfo> userInfoList() {return this.restTemplate.getForObject(this.REST_URL_PROVIDER_PREFIX + "/user/userInfoList",List.class);}
}

2.4.3、编写用户服务控制层代码

import com.hqyj.common.model.UserInfo;
import com.hqyj.customerapi.service.UserConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;/**** @title UserConsumerController* @desctption 用户控制层* @author kelvin* @create 2023/5/11 14:22**/
@RestController
@RequestMapping("/user")
public class UserConsumerController {@Autowiredprivate UserConsumerService userConsumerService;@GetMapping("/userInfoList")public List<UserInfo> userInfoList(){return userConsumerService.userInfoList();}
}

2.4.4、统一返回结果

在公共模块common-api里面添加DTO

import lombok.Data;/**** @title 统一返回格式类* @param <T>* @desctption 统一返回格式* @author kelvin* @create 2023/5/11 14:28**/
@Data
public class ResponseDTO<T> {/*** 返回编码*/private Integer code;/*** 统一返回消息*/private String message;/*** 统一返回数据体*/private T data;}

2.4.5、统一异常处理

实现 ResponseBodyAdvice接口

import com.hqyj.common.dto.ResponseDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/**** @title 统一异常处理类* @desctption 统一异常处理* @author kelvin* @create 2023/5/11 14:33**/
@RestControllerAdvice(basePackages = "com.hqyj.customerapi.controller")
@Slf4j
public class ControllerResponseAdvice implements ResponseBodyAdvice<Object> {@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {//true为织入通知return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {ResponseDTO<Object> objectResponseDTO = new ResponseDTO<>();objectResponseDTO.setCode(200);objectResponseDTO.setData(body);return objectResponseDTO;}/*** 统一异常处理* @param e* @return*/@ExceptionHandler(value = Exception.class)public Object exception(Exception e){log.error("系统异常",e);ResponseDTO<Object> objectResponseDTO = new ResponseDTO<>();objectResponseDTO.setCode(500);objectResponseDTO.setMessage("系统异常");return objectResponseDTO;}
}

2.5、启动项目,访问接口

2.5.1、启动项目

需要上一章节的2个项目先运行
在这里插入图片描述

2.5.2、访问接口

访问地址:http://localhost/user/userInfoList
在这里插入图片描述


总结

在以前的分布式项目里,我们使用zookeeper、redis等来存放服务注册信息,在客户端调用服务时,需要自己手动获取可用服务清单,使用起来非常麻烦,对初级开发人员特别不友好,一不小心就犯错,比如zookeeper依赖版本冲突、zookeeper\redis集群地址填写错误、zookeeper\redis配置项缺失等。
Ribbon的出现解决了上述部分问题,而且Ribbon属于Netflix生态里的组件,与Eureka可以很好的集成起来组合使用,非常方便。

http://www.yayakq.cn/news/947733/

相关文章:

  • 怎么买网站空间手机网站有哪些类型
  • 网站界面需求网站建设用哪种语言最好
  • 如何做网站费用多少网站开发pc端和手机端
  • python flask做网站网站建设的任务规划
  • 淘淘乐网站建设年度考核表个人总结网站建设
  • 我网站正在建设中易语言 做网站
  • 做网站开发哪种语言更稳定高效中国没公司怎么做网站
  • 专门做项目代理的网站双语教学示范课程建设项目网站
  • 浙江省住房和城乡建设厅网官方网站霞山网站建设公司
  • 网站建设高考题东莞海边网站建设工作室
  • 关于插画的网站电子商务网站建设与管理答案
  • 建站行业转型东风地区网站建设公司
  • 郑州 高端网站建设网页美工基础
  • 建设银行网站怎么登陆密码郑州网站建设yipinpai
  • 网站开发方式吸引人的软文标题
  • 微网站可以做商城吗定西市建设网站费用
  • 昆明网站建设赵做移动端网站
  • 建网站昆明做中介网站需要多少钱
  • 专业网站制作哪便宜网络管理app
  • flash网站建设技术...商务网站平台建设预算
  • asp.net网站思路阿里巴巴网站威海哪里做?
  • 上海手机网站青岛煜鹏网站建设公司
  • 龙华网站建设昆山哪里有人做网站
  • 网站空间哪里便宜wordpress全站搜索
  • 微信做引流网站服装设计图
  • 小店网站怎么做免费开放的api网站应用
  • 黄冈论坛百度贴吧aso优化贴吧
  • 遂宁网站seo南山网站建设哪家效益快
  • 家居网站建设定位分析论文政务门户网站建设方案
  • 宁波龙山建设有限公司网站如何给网站做后台