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

好看的网站模板做经营行网站需要什么手续

好看的网站模板,做经营行网站需要什么手续,定制高端网页,dz网站如何做301微服务是目前业界使用的最重要的实现方面。通过使用微服务架构#xff0c;开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来#xff0c;人们开始在微服务中搜索和采用各种模式。大多数时候#xff0c;新模式的产生是为了解决另一个模式中出现的常见问题。…微服务是目前业界使用的最重要的实现方面。通过使用微服务架构开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来人们开始在微服务中搜索和采用各种模式。大多数时候新模式的产生是为了解决另一个模式中出现的常见问题。就这样随着时间的推移大量的模式进入了实践。您可以从这里获得完整的摘要: https://microservices.io/patterns/microservices.html 考虑到它们的范围这些微服务模式进一步分为几类。在所有这些模式中许多开发人员都使用了一些非常重要和流行的模式。断路器是其中之一有助于以适当的方式管理下游服务故障。让我们了解这种模式的作用。 一、断路器介绍 1.1 什么是断路器模式? 您可能已经听说过我们在电子产品中发现的断路器。它的主要目的是什么简单地说在意想不到的情况下切断电流。与此相同这种微服务模式也因其具有相同的性质而得名。 这种模式在服务之间进行通信时出现。让我们来看一个简单的场景。假设我们有两个服务服务 A 和 B。服务 A 正在调用服务 BAPI 调用以获取所需的一些信息。当服务 A 调用服务 B 时如果服务 B 由于某些基础设施中断而关闭会发生什么服务 A 没有得到结果它将因抛出异常而挂起。然后另一个请求来了它也面临同样的情况。就像这个请求线程将被阻塞/挂起直到服务 B 出现结果网络资源将被耗尽性能低下用户体验差。级联故障也可能因此发生。 在这种情况下我们可以使用这种断路器模式来解决问题。它为我们提供了一种在不打扰最终用户或应用程序资源的情况下处理这种情况的方法。 1.2 模式如何运作 基本上它的行为与电路断路器相同。当应用程序的远程服务调用失败次数超过给定阈值时断路器将在特定时间段内跳闸。在此超时到期后断路器允许有限数量的请求通过它。如果这些请求成功则断路器将关闭并恢复正常操作。否则如果它们失败了超时时间将重新开始然后像以前一样做剩下的事情。 以下是一些常见概念讲解帮助大家来理解断路器。 1.3 模式状态的生命周期 断路器模式中讨论了 3 个主要状态。他们是 CLOSED OPEN HALF OPEN 让我们简要了解一下状态…… CLOSED State 当正在交互的两个服务都启动并运行时断路器默认关闭。断路器会持续统计远程 API 调用的次数。 OPEN State 一旦远程 API 调用失败百分比超过给定阈值断路器就会将其状态更改为 OPEN 状态。调用微服务会立即失败返回异常。也就是说流量中断了。 HALF OPEN State 在 OPEN 状态停留给定的超时时间后断路器自动将其状态变为 HALF OPEN 状态。在这种状态下只允许有限数量的远程 API 调用通过。如果失败调用计数大于此有限数量则断路器再次变为 OPEN 状态流量继续中断。否则关闭断路器流量恢复正常。 Pattern states 为了实际演示该模式我将使用 Spring Boot 框架来创建微服务。并用 Resilience4j 库实现断路器。 1.4 什么 Resilience4j? Resilience4j 是一个轻量级、易于使用的容错库其灵感来自于 Netflix Hystrix。它提供各种功能如下 断路器 — 容错 速率限制器 — 阻止太多请求 时间限制器 — 调用远程操作时的限制时间 重试机制 — 失败操作自动重试 隔板 — 限制并发请求数 缓存 — 存储远程操作的结果 在本文中我们将基于 Spring Boot 项目来使用第一个功能。 二、代码讲解 2.1 创建 2️⃣ 个微服务 我将使用名为 loan-service贷款 和 rate-service利率 的两个服务来实现一个简单的服务间通信场景。 技术细节 带有 H2 内存中 DB、JPA、Hibernate、Actuator、Resilience4j 的 Spring Boot 脚本 贷款服务可以获取保存在数据库中的贷款每个贷款对象都有贷款类型。根据贷款类型有单独的利率百分比。因此利率服务的名称包含那些利率对象的详细信息。 我将从贷款服务调用利率服务请求给定贷款类型的利率。 然后我必须根据贷款类型计算贷款的总利息价值。 然后我将使用从利率服务获得的利率更新所有贷款对象的利息金额。 Project setup 由于费率服务是独立的我将首先实现费率服务的基本功能。 使用 POM 文件下方提供的依赖项创建一个新的 Spring Boot 项目。我将其命名为费率服务。https://github.com/SalithaUCSC/spring-boot-circuit-breaker/blob/main/rate-service/pom.xml Controller: RestController RequestMapping(api) public class RateController {Autowiredprivate RateService rateService;GetMapping(path  /rates/{type})public ResponseEntityRate getRateByType(PathVariable(type) String type) {return ResponseEntity.ok().body(rateService.getRateByType(type));} }Service: Service public class RateService {Autowiredprivate RateRepository repository;public Rate getRateByType(String type) {return repository.findByType(type).orElseThrow(() - new RuntimeException(Rate Not Found:   type));} }Repository: Repository public interface RateRepository extends JpaRepositoryRate, Integer {OptionalRate findByType(String type); }Entity: Builder Getter Setter AllArgsConstructor NoArgsConstructor Entity Table(name  rates) public class Rate {IdGeneratedValue(strategy  GenerationType.IDENTITY)Integer id;String type;Column(name  rate)Double rateValue; }Configuration: server:port: 9000 spring:application:name: rate-servicedatasource:url: jdbc:h2:mem:cb-rate-dbusername: rootpassword: 123driverClassName: org.h2.Driverjpa:database-platform: org.hibernate.dialect.H2Dialecthibernate:ddl-auto: create-droph2:console:enabled: true启动类主类将在服务即将到来时添加两种类型的贷款利率。 SpringBootApplication public class RateServiceApplication {Autowiredprivate RateRepository rateRepository;public static void main(String[] args) {SpringApplication.run(RateServiceApplication.class, args);}PostConstructpublic void setupData() {rateRepository.saveAll(Arrays.asList(Rate.builder().id(1).typ并检查我们需要的 APIe(PERSONAL).rateValue(10.0).build(),Rate.builder().id(2).type(HOUSING).rateValue(8.0).build()));} }现在我们可以启动 rate-service 并检查我们需要的 API。转到 http://localhost:9000/api/rates/PERSONAL 并查看结果。你应该得到这个回应。 {id: 1,type: PERSONAL,rateValue: 10}2.2 贷款服务添加断路器 现在我需要实施贷款服务。 loan-service 内部需要断路器因为它正在调用 rate-service。因此需要 Resilience4j 库。我需要检查断路器的状态。为此我需要在贷款服务中启用 Actuator。 使用 POM 文件下方提供的依赖项创建一个新的 Spring Boot 项目。我将其命名为贷款服务。 https://github.com/SalithaUCSC/spring-boot-circuit-breaker/blob/main/loan-service/pom.xml 让我们为贷款服务添加基本功能。 Controller: RestController RequestMapping(api) public class LoanController {Autowiredprivate LoanService loanService;GetMapping(path  /loans)public ResponseEntityListLoan getLoansByType(RequestParam(type) String type) {return ResponseEntity.ok().body(loanService.getAllLoansByType(type.toUpperCase()));}}Repository: public interface LoanRepository extends JpaRepositoryLoan, Integer {ListLoan findByType(String type); }DTO这用于转换来自费率服务 API 调用的响应。因为它是 Rate 的类型。同rate-service Rate实体类只是省略了ORM相关的东西 Data AllArgsConstructor NoArgsConstructor public class InterestRate {Integer id;String type;Double rateValue; }Entity: Builder Getter Setter AllArgsConstructor NoArgsConstructor Entity Table(name  loans) public class Loan {IdGeneratedValue(strategy  GenerationType.IDENTITY)Integer id;String type;Double amount;Double interest; }启动类 主类将在服务即将到来时添加 3 个贷款对象。利息金额已设置为零因为我们后来通过远程调用 rate-service 对其进行了更新。 我们需要一个 RestTemplate 类的 Bean 来执行远程 API 调用。如果您不知道请从此处阅读: https://salithachathuranga94.medium.com/rest-template-with-spring-boot-e2001a8219e6 SpringBootApplication public class LoanServiceApplication {Autowiredprivate LoanRepository loanRepository;public static void main(String[] args) {SpringApplication.run(LoanServiceApplication.class, args);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}PostConstructpublic void setupData() {loanRepository.saveAll(Arrays.asList(Loan.builder().id(1).type(PERSONAL).amount(200000.0).interest(0.0).build(),Loan.builder().id(2).type(HOUSING).amount(6000000.0).interest(0.0).build(),Loan.builder().id(3).type(PERSONAL).amount(100000.0).interest(0.0).build()));} }Service: 这是我们执行远程调用的最重要的地方。我们需要在利率服务中使用 RestTemplate: http://localhost:9000/api/rates/{type} 调用此 API 以获取贷款类型的百分比。然后我们计算利息金额为贷款金额*利率/100并更新贷款利息金额。 Service public class LoanService {Autowiredprivate LoanRepository loanRepository;Autowiredprivate RestTemplate restTemplate;private static final String SERVICE_NAME  loan-service;private static final String RATE_SERVICE_URL  http://localhost:9000/api/rates/;public ListLoan getAllLoansByType(String type) {HttpHeaders headers  new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntityInterestRate entity  new HttpEntity(null, headers);ResponseEntityInterestRate response  restTemplate.exchange((RATE_SERVICE_URL  type),HttpMethod.GET, entity,InterestRate.class);InterestRate rate  response.getBody();ListLoan loanList  new ArrayList();if (rate ! null) {loanList  loanRepository.findByType(type);for (Loan loan : loanList) {loan.setInterest(loan.getAmount() * (rate.getRateValue() / 100));}}return loanList;} }Configuration: server:port: 8000 spring:application:name: loan-servicedatasource:url: jdbc:h2:mem:cb-loan-dbusername: rootpassword: 123driverClassName: org.h2.Driverjpa:database-platform: org.hibernate.dialect.H2Dialecthibernate:ddl-auto: create-droph2:console:enabled: true management:endpoint:health:show-details: alwaysendpoints:web:exposure:include: healthhealth:circuitbreakers:enabled: true我们需要在执行器暴漏断路器详细信息暴漏端点。稍后我们将在此处添加断路器配置。目前不需要。 现在我们可以启动 rate-service 并检查我们需要的 API。转到 http://localhost:8000/api/loans?typepersonal 并查看结果。你应该得到这个回应。 [ {id: 1,type: PERSONAL,amount: 200000,interest: 20000},  {id: 3,type: PERSONAL,amount: 100000,interest: 10000} ]2.3 添加回退方法 现在我们必须用注释来丰富我们的 Loan 服务方法。它被称为 “CircuitBreaker”。在这里SERVICE_NAME 被视为“贷款服务”。然后我们必须提供一个 fallbackMethod。这样做的目的是当下游服​​务速率服务无法响应时默认调用它。 CircuitBreaker(name  SERVICE_NAME, fallbackMethod  getDefaultLoans) public ListLoan getAllLoansByType(String type) {............... }我已经设置了当费率服务没有响应时默认返回空列表的方法。 您可以设置此方法以显示错误消息而不发送空消息。你可以返回这样的东西 — “Rate service is not responding.请求失败”。发送空数组或一组默认数据不是理想的方式。因为这会给用户带来困惑。但是您必须确保这两种方法都返回相同类型的数据。在我的例子中两种方法都返回列表 public ListLoan getDefaultLoans(Exception e) {return new ArrayList(); }2.4 添加断路器配置 让我们添加 Resilience4j 断路器配置。将此添加到贷款服务中的 application.yml。 resilience4j:circuitbreaker:instances:loan-service:registerHealthIndicator: truefailureRateThreshold: 50minimumNumberOfCalls: 5automaticTransitionFromOpenToHalfOpenEnabled: truewaitDurationInOpenState: 5spermittedNumberOfCallsInHalfOpenState: 3slidingWindowSize: 10slidingWindowType: COUNT_BASEDfailureRateThreshold — 失败阈值的预期百分比。我将其设置为 50%。这意味着当失败的远程调用总数 % 等于或大于 50% 时断路器将处于活动状态以停止进一步的请求。 minimumNumberOfCalls — 决定启用断路器的失败百分比的 API 调用总数的最小值。我将其设置为 5。假设前 5 个 API 调用中有 3 个 API 调用失败。这意味着 failureRateThreshold (3/5) * 100 60%。 automaticTransitionFromOpenToHalfOpenEnabled — 我已将其设置为 true。当转换的正确时间到来时它会自动将 OPEN 状态转换为 HALF OPEN 状态 waitDurationInOpenState — 从 OPEN 状态进入 HALF OPEN 状态之前的超时时间。 5 秒后断路器就将更改状态。 permittedNumberOfCallsInHalfOpenState — 在 HALF OPEN 状态下应发送的 LIMITED API 调用数。我将其设置为 3。因此在 3 次 API 调用之后如果失败则断路器将再次进入 OPEN 状态。否则断路器将关闭因为 rate-service 已启动。 slidingWindowType我在这里设置了类型以根据请求计数保持断路器行为。 启动这两个服务。现在转到贷款服务输入监控端点 URLhttp://localhost:8000/actuator/health。断路器的详细信息会在响应中突出显示。 {status: UP,components: {circuitBreakers: {status: UP,details: {loan-service: {status: UP,details: {failureRate: -1.0%,failureRateThreshold: 50.0%,slowCallRate: -1.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 1,slowCalls: 0,slowFailedCalls: 0,failedCalls: 0,notPermittedCalls: 0,state: CLOSED}}}},......................................} }bufferedCalls — 从贷款服务到利率服务的总 API 调用 failedCalls - 从贷款服务到利率服务的失败 API 调用总数 failureRate — (failedCalls/bufferedCalls) * 100% 2.5 测试断路器 我们必须遵循一些有序的步骤才能准确地看到变化。在每一步中我们都必须查看监控端点并通过更改其状态查看断路器的行为方式。开始 启动两个微服务。贷款服务在 8000 上运行利率服务在 9000 上运行。 现在点击此 API 2 次http://localhost:8000/api/loans?typepersonal。然后去检查监控端点 http://localhost:8000/actuator/health。现在 bufferedCalls 计数已按预期更新为 2。由于费率服务已启动断路器仍处于关闭状态。 {loan-service: {status: UP,details: {failureRate: -1.0%,failureRateThreshold: 50.0%,slowCallRate: -1.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 2,slowCalls: 0,slowFailedCalls: 0,failedCalls: 0,notPermittedCalls: 0,state: CLOSED}} }现在停止费率服务然后点击贷款服务 API URL 3次http://localhost:8000/api/loans?typepersonal。你应该得到一个我们设置为后备的空数组这将使 bufferedCalls 计数为 5前 2 个和这个 3。同时failedCalls 计数更新为 3。现在 failureRate 变为 60%( (3/5) * 100% )。然后它已经超过了我们的阈值50%。然后断路器将其状态更改为 OPEN {loan-service: {status: CIRCUIT_OPEN,details: {failureRate: 60.0%,failureRateThreshold: 50.0%,slowCallRate: 0.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 5,slowCalls: 0,slowFailedCalls: 0,failedCalls: 3,notPermittedCalls: 0,state: OPEN}} }然后等待 5 秒钟。它应该在 5 秒后转换为半开状态根据我们的配置我们将 waitDurationInOpenState 设置为 5s 这是超时时间。在这段时间之后请求计数也将被重置。 {loan-service: {status: CIRCUIT_HALF_OPEN,details: {failureRate: -1.0%,failureRateThreshold: 50.0%,slowCallRate: -1.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 0,slowCalls: 0,slowFailedCalls: 0,failedCalls: 0,notPermittedCalls: 0,state: HALF_OPEN}} }在 HALF OPEN 状态下有限数量的请求将被允许通过。在我们的例子中它在配置中为 3相关值已设置为 permittedNumberOfCallsInHalfOpenState: 3。 由于 rate-service 仍然关闭只需再次尝试 loan-service API 3次http://localhost:8000/api/loans?typepersonal 发生了什么事 3次调用全部失败那么 failureRate 就是 100%。我们的断路器将再次打开。 {loan-service: {status: CIRCUIT_OPEN,details: {failureRate: 100.0%,failureRateThreshold: 50.0%,slowCallRate: 0.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 3,slowCalls: 0,slowFailedCalls: 0,failedCalls: 3,notPermittedCalls: 0,state: OPEN}} }超时 5 秒后它将再次变为半开状态使用执行器再次检查。你应该得到一个用于贷款服务 API 调用的空数组... 现在开始收费服务然后再次尝试此 API 3次http://localhost:8000/api/loans?typepersonal 发现断路器已关闭因为成功执行了预期的有限 API 调用计数。 {loan-service: {status: UP,details: {failureRate: -1.0%,failureRateThreshold: 50.0%,slowCallRate: -1.0%,slowCallRateThreshold: 100.0%,bufferedCalls: 0,slowCalls: 0,slowFailedCalls: 0,failedCalls: 0,notPermittedCalls: 0,state: CLOSED}} }自此我们完成了断路器的测试工作。是不是很神奇它正在按预期工作 完整的源代码可以在这个 GitHub 存储库中找到https://github.com/SalithaUCSC/spring-boot-circuit-breaker 最后感谢大家阅读希望这篇文章能为你提供价值。公众号【waynblog】分享技术干货、开源项目、实战经验、高效开发工具等您的关注将是我的更新动力。
http://www.zqtcl.cn/news/979735/

相关文章:

  • 舟山建设网站公司wordpress的总结
  • 如何做com的网站做网站设计学那个专业好
  • 中山如何建设网站如何安装wordpress模板
  • 如何搭建自己得网站树状wordpress主题
  • 公司网站是别人做的如何换logo北京网站设计浩森宇特
  • 直播网站制作做阿里巴巴网站电话
  • 免费建一个自己的网站做国内网站花费
  • 苏州手机网站搭建郑州建设网站制作公司
  • 贵阳网站建设kuhugz沽源网站建设
  • 深圳网站seo推广河北建设工程信息网停用公告
  • 给公司建网站 深圳wordpress去掉cat
  • 网站建设推荐华网天下土巴兔装修平台怎么收费
  • 微网站 网页成品网站模块
  • soap公司网站wordpress 相关推荐
  • 浙江质监站网址固始网站建设公司
  • 济南 外贸网站建设怎么知道网站是哪个公司做的
  • 分享wordpress优秀主题东莞百度seo找谁
  • 顺德网站制作案例价位超兽vps群
  • 网站建设 搜狐号电脑赚钱的项目有哪些
  • 做生意的网站广州互联网企业100强
  • 网站单页支付宝支付怎么做网站制作公司套路
  • 本网站维护升级官方网站建设滞后
  • 网站上漂亮的甘特图是怎么做的江门seo方法
  • 局域网建设网站seo优化查询
  • 网站安装模板wordpress多个函数文件
  • 网站建设飠金手指排名十二毕业设计论文网
  • 高密哪里做网站好网络营销的四大特点
  • 网站锚文本怎么做怎么在网上接网站建设
  • php做公司网站中国大工程建设需要什么样的人才
  • 优化公司怎么优化网站的技能网站建设项目需求