《Spring Guides系列学习》guide66 - guide68及小结

这篇具有很好参考价值的文章主要介绍了《Spring Guides系列学习》guide66 - guide68及小结。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。

《Spring Guides系列学习》guide66 - guide68及小结

接着上篇看过的guide65,接着往下看。

guide66、Spring Cloud Circuit Breaker Guide

首先了解下Spring Cloud Circuit Breaker是Spring Cloud提供的一组用于实现断路器模式的组件,其中包括Hystrix和Resilience4J两种实现方式。

在了解下断路器模式:

断路器模式(Circuit Breaker Pattern)是一种用于处理分布式系统中故障的设计模式。在分布式系统中,各个服务之间的网络通信容易受到网络故障、超时、延迟、资源不足等问题的影响,如果不进行有效处理,可能会导致系统崩溃或无法正常工作。断路器模式通过在服务之间插入一个断路器组件,监控服务调用的状态,并在出现故障时自动切换到备用方案,避免了故障的传递和系统的崩溃。

断路器模式通常包含以下几个组件:

  1. 断路器状态:断路器可以处于开启、关闭或半开状态。开启状态表示服务调用失败,在一定时间内不会再次尝试调用服务;关闭状态表示服务调用正常,可以尝试调用服务;半开状态表示断路器正在尝试重新调用服务,如果调用成功,则切换到关闭状态,否则切换到开启状态。
  2. 断路器监控器:用于监控服务调用的状态,根据状态切换断路器状态。
  3. 服务调用:需要进行断路器保护的服务调用。
  4. 备用方案:当服务调用失败时,切换到的备用方案,通常是返回缓存数据、调用备用服务、返回默认值等。

断路器模式可以有效提高分布式系统的稳定性和可靠性,防止故障的传递和系统的崩溃,从而提高用户体验和业务效率。

这篇guide采用的是Resilience4J。

要简单实现断路器,要设置至少两个服务。

先设置一个Bookstore服务,可以访问/recommended端点,然后返回String。

@RestController
@SpringBootApplication
public class BookstoreApplication {

  @RequestMapping(value = "/recommended")
  public Mono<String> readingList(){
    return Mono.just("Spring in Action (Manning), Cloud Native Java (O'Reilly), Learning Spring Boot (Packt)");
  }

  public static void main(String[] args) {
    SpringApplication.run(BookstoreApplication.class, args);
  }
}

再启动另外一个服务reading,算作是bookstore应用程序的前端,我们在reading服务提供/to-read接口,该接口从bookstore调用服务。

@Service
public class BookService {
  private static final Logger LOG = LoggerFactory.getLogger(BookService.class);
  private final WebClient webClient;
  private final ReactiveCircuitBreaker readingListCircuitBreaker;
  public BookService(ReactiveCircuitBreakerFactory circuitBreakerFactory) {
    this.webClient = WebClient.builder().baseUrl("http://localhost:8090").build();
    this.readingListCircuitBreaker = circuitBreakerFactory.create("recommended");
  }

  public Mono<String> readingList() {
    return readingListCircuitBreaker.run(webClient.get().uri("/recommended").retrieve().bodyToMono(String.class), throwable -> {
      LOG.warn("Error making request to book service", throwable);
      return Mono.just("Cloud Native Java (O'Reilly)");
    });
  }
@RestController
@SpringBootApplication
public class ReadingApplication {
    
  @Autowired
  private BookService bookService;
  
  @RequestMapping("/to-read")
  public Mono<String> toRead() {
    return bookService.readingList();
  }
  public static void main(String[] args) {
    SpringApplication.run(ReadingApplication.class, args);
  }
}

注意两个服务端口要不同,然后运行两个端口,访问localhost:8080/to-read,

会返回:

《Spring Guides系列学习》guide66 - guide68及小结

关闭bookstore服务,熔断器齐了作用,返回:
《Spring Guides系列学习》guide66 - guide68及小结


guide67、Building a Guide with VS Code

就是介绍下用vs code创建和打开项目。


Building a GraphQL service

GraphQL是一种用于API设计的查询语言和运行时环境。它可以让客户端应用程序准确地描述它们需要的数据,并从API中获取它们,而不是返回整个文档或数据集,从而提高了API的效率和可扩展性。

使用 Spring for GraphQL 创建服务器的主要步骤:

  • 定义 GraphQL 模式
  • 实现逻辑以获取查询的实际数据

guide中的应用程序就是一个简单的 API,用于获取特定书籍的详细信息。

定义graphql模式:

type Query {
    bookById(id: ID): Book
}

type Book {
    id: ID
    name: String
    pageCount: Int
    author: Author
}

type Author {
    id: ID
    firstName: String
    lastName: String
}

每个 GraphQL schema 都有一个顶级Query类型,它下面的字段是应用程序公开的查询操作。这里的模式定义了一个名为查询的查询bookById,它返回一本特定书籍的详细信息。

还定义了Book和Author两种类型。

在GraphQL中,Schema(模式)定义了API的类型系统和可用操作。它是一个描述所有可用类型和操作的约定。
Schema由类型定义和字段定义组成,它定义了可用的查询和变更操作以及它们的参数和返回类型。Schema还定义了类型之间的关系,例如对象之间的关联、列表和非空约束等。
在GraphQL中,Schema是API的核心,它定义了客户端可以查询的所有数据和操作。客户端可以使用Schema来构建查询,并使用Schema来验证查询是否符合API的约定。

数据来源:

GraphQL 的一个关键优势是可以从任何地方获取数据。数据可以来自数据库、外部服务或静态内存列表。

为了简化教程,书籍和作者数据将来自各自类中的静态列表。

创建Book和Author数据源:也就是Book和Author类

public class Author {
    private String id;
    private String firstName;
    private String lastName;
    private static List<Author> authors = Arrays.asList(
            new Author("author-1", "Joshua", "Bloch"),
            new Author("author-2", "Douglas", "Adams"),
            new Author("author-3", "Bill", "Bryson")
    );
    public static Author getById(String id) {
        return authors.stream()
                .filter(author -> author.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
    ...
public class Book {
    private String id;
    private String name;
    private int pageCount;
    private String authorId;
    private static List<Book> books = Arrays.asList(
            new Book("book-1", "Effective Java", 416, "author-1"),
            new Book("book-2", "Hitchhiker's Guide to the Galaxy", 208, "author-2"),
            new Book("book-3", "Down Under", 436, "author-3")
    );
    public static Book getById(String id) {
        return books.stream()
                .filter(book -> book.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
    ...

Spring for GraphQL 提供了一种基于注解的编程模型。使用控制器注解方法,我们可以声明如何获取特定 GraphQL 字段的数据。

@Controller
public class BookController {
    @QueryMapping
    public Book bookById(@Argument String id) {
        return Book.getById(id);
    }

    @SchemaMapping
    public Author author(Book book) {
        return Author.getById(book.getAuthorId());
    }
}

通过定义一个被@QueryMapping注释的方法bookById,就可以获取Book。

@Argument是一个GraphQL Java库中的注解,用于将方法参数映射到GraphQL查询或变量中的参数。通过将@Argument注解添加到处理程序方法的参数上,可以指定参数的名称、类型、默认值和是否必需等信息。这样,GraphQL查询就可以使用相应的参数来调用处理程序方法。

GraphiQL 是一个有用的可视化界面,用于编写和执行查询等。通过将此配置添加到application.properties文件来启用 GraphiQL。

spring.graphql.graphiql.enabled=true

启动程序后,导航到:http://localhost:8080/graphiql?path=/graphql

左边输入查询语句:

《Spring Guides系列学习》guide66 - guide68及小结

也可以用postman测试:

《Spring Guides系列学习》guide66 - guide68及小结


后半部分小结:

35:介绍了spring里的调度任务,核心是注解@Scheduled和@EnableScheduling。

36:用gradle去创建管理项目,构建方式类似于maven,核心在于build.gradle文件。

37:主要介绍了jdbcTemplate的使用,其就是在jdbc上面对数据库的操作做了深层次的封装。

38:用Spring Security的嵌入式LDAP服务器保护应用程序。

39:用RabbitTemplate来进行消息的发送和接收。RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件。

40:通过javax.validation中的验证注解对表单输入进行检查。

41:用jms进行消息的发送接收。其中使用JmsTemplate来发消息。

42:介绍了spring security, SecurityFilterChain bean定义哪些URL路径被保护, 哪些不用经过身份验证。

43:在Apache Geode数据管理系统上,使用spring data进行数据操作。

44:利用spring cache将数据缓存到Apache Geode。

45:使用 Spring Data JPA 存储和检索数据

46、介绍了spring mvc框架,请求从客户端发送到控制器(Controller),然后控制器根据业务逻辑处理请求,并将结果传递给视图(View),最后视图将结果渲染成 HTML 或其他格式的响应发送给客户端。

47、创建异步的方法,讲了@Async注解。

48、用springboot构建程序。

49、使用sts的简易教程,现在都不用sts了。

50、用jquery去ajax访问restful服务。

51、介绍了解了soap服务。

52、使用Spring Data REST检索存储在Neo4j NoSQL的数据。

53、使用Spring Data REST检索数据,和上篇讲的基本一致,就是把底层数据存储结构变为了Pivotal GemFire。

54、使用spring缓存,核心是@cacheable、@cacheput等注解。

55、介绍使用intelliJ IDEA创建打开程序。

56、用Eureka来做服务注册中心,进行服务注册和发现。

57、用spring进行单元测试,除了springTest注解可以加载整个应用上下文之外,还可以使用@WebMvcTest注解,将测试缩小到web层。

58、用maven进行多模块管理,这个也在之前部门项目里学习过。

59、使用google cloud pub/sub进行消息传输,仅了解。

60、一种API设计模式Consumer Driven Contracts,其中API使用者定义了他们期望API提供者提供的行为。

61、使用Vault,将配置属性存储在 Vault 中,构建 Spring 应用程序并将其与 Vault 连接使用。Vault 是一个数据管理系统,允许存储静态加密的敏感数据。

62、将一个应用程序部署到Azure的操作步骤,仅了解下。

63、构建一个微服务应用程序,该应用程序使用 Spring Cloud LoadBalancer 在对另一个微服务的调用中提供客户端负载平衡。核心是@LoadBalanced 以及@LoadBalancerClient 注解。

64、介绍了解了Spring Cloud Data Flow ,一个用于构建和管理数据流管道的开源工具。

65、介绍了Kubernetes, 也就是K8s,开源的容器编排和管理平台。

66、了解Spring Cloud Circuit Breaker,是Spring Cloud提供的一组用于实现断路器模式的组件。

67、介绍用vs code创建打开项目。

68、介绍了GraphQL,是一种用于API设计的查询语言和运行时环境。它可以让客户端应用程序准确地描述它们需要的数据,并从API中获取它们,而不是返回整个文档或数据集。

目前guide已基本看完,还有一些模块没有深入了解,比如:docker、 响应式编程、k8s、spring框架剖析(接下来主要去看这块)。文章来源地址https://www.toymoban.com/news/detail-463768.html

到了这里,关于《Spring Guides系列学习》guide66 - guide68及小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Spring Guides系列学习》guide35 - guide40

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide34,接着往下看。 @Scheduled注解 : 是spring boot提供的用

    2024年02月06日
    浏览(43)
  • 《Spring Guides系列学习》guide11 - guide15

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide10,接着往下看。 主要讲了非侵入式事务操作数据库

    2024年02月13日
    浏览(29)
  • 《Spring Guides系列学习》guide46 - guide50

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide45,接着往下看。 Spring MVC 是 Spring Framework 的一个模块

    2024年02月05日
    浏览(37)
  • 《Spring Guides系列学习》guide16 - guide20

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide15,接着往下看。 主要讲的编写一个angularJS的客户端

    2024年02月06日
    浏览(37)
  • 《Spring Guides系列学习》guide6 - guide10

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide5,接着往下看。 讲述了使用neo4j,将应用程序数据存

    2024年02月16日
    浏览(35)
  • 《Spring Guides系列学习》guide1 - guide5

    要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 开始吧,自己按照顺序给每篇Guide编了号。 主要讲的是如何创建一个res

    2024年02月07日
    浏览(72)
  • 论文阅读 Stepwise Feature Fusion: Local Guides Global

    我在找论文时发现,把自己的分割模型命名为ssformer的有两个:,一个论文SSformer: A Lightweight Transformer for Semantic Segmentation中提出的一种轻量级Transformer模型,结构如下 这个结构很简单,就是在用MLP层处理一下不同层的swin transformer block特征,然后融合。 这个没什么太多好说的

    2024年03月16日
    浏览(71)
  • Guides new learners through bert‘s internals!

    作者:禅与计算机程序设计艺术 BERT(Bidirectional Encoder Representations from Transformers)是一个自然语言处理(NLP)预训练模型,由Google AI团队于2018年提出,它被证明能够提升多种自然语言理解任务的性能。本文将介绍BERT的基本概念、术语、算法原理、实现方法、数学原理及应用。希望

    2024年02月07日
    浏览(36)
  • Spring学习小结_2

    Spring学习小结_1 https://blog.csdn.net/m0_58730471/article/details/130075657?spm=1001.2014.3001.5501 Spring Bean的生命周期是从 Bean 实例化之后( 在内存中开辟空间 ),即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期(完整的说还要

    2023年04月26日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包