A Microservice Architecture with Spring Boot and Spring Cloud(一)

前段日子,就有个想法,打算翻译一些关于SpringBoot的文档资料。后来在学习SpringBoot中,无意发现一本SpringBoot与SpringCloud微服务架构入门级的书籍,感觉不错,决定拿它作为我职业生涯翻译的第一本技术书。

《A Microservice Architecture with Spring Boot and Spring Cloud》,一个由SpringBoot与SpringCloud组成的微服务架构,该书籍来源Baeldung 网站,各位可以常去该网站浏览,里面有大量关于Spring家族的文档资料。

由于个人不是专业翻译,过程中难免有谬误之处,如果发现任何语句翻译错误,请在我的博客留言,我会尽快处理。

这里写图片描述

这里写图片描述

目录:

  1. 概述
  2. 资源
  3. REST API
  4. 安全配置
  5. SpringCloud配置
    5.1服务配置
    5.2服务发现
    5.3网关服务
    5.4REST APIs
  6. 会话配置
  7. REST API测试
  8. 运行
  9. 总结

概述

在本指南中,我们将专注于建立一个简单且正常运行,由Spring Boot和Spring Cloud组建的微服务体系结构。

如果你想进一步深入到Spring Cloud,可点击查看我们的Spring Cloud文章

我们要在这里根据书本内容开始构建的一个简单的应用程序。 我们从两个REST API开始:

  • Book API
  • Rating API

资源

首先,我们看看Boot类:

public class Book {
    private long id;
    private String title;
    private String author;

    // standard getters and setters
}

和Rating类,用来构建第二个API:

public class Rating {
    private long id;
    private Long bookId;
    private int stars;

    // standard getters and setters
}

REST API

现在,我们将构建两个简单的API - / books和/ rating。

首先,我们来查看/ books API:

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private BookService bookService;

    @GetMapping
    public List<Book> findAllBooks() {
        return bookService.findAllBooks();
    }

    @GetMapping("/{bookId}")
    public Book findBook(@PathVariable Long bookId) {
        return bookService.findBookById(bookId);
    }

    @PostMapping
    public Book createBook(@RequestBody Book book) {
        return bookService.createBook(book);
    }

    @DeleteMapping("/{bookId}")
    public void deleteBook(@PathVariable Long bookId) {
        bookService.deleteBook(bookId);
    }

    @PutMapping("/{bookId}")
     public Book updateBook(@RequestBody Book book, @PathVariable Long bookId) {
        return bookService.updateBook(book, bookId);
    }

     @PatchMapping("/{bookId}")
     public Book updateBook(@RequestBody Map<String, String> updates, @PathVariable Long bookId) {
        return bookService.updateBook(updates, bookId);
    }
}

同样地,看看/ ratings API和RantingController:

@RestController
@RequestMapping("/ratings")
public class RatingController {
    @Autowired
    private RatingService ratingService;

    @GetMapping
    public List<Rating> findRatingsByBookId(@RequestParam(required = false, defaultValue = "0") Long bookId) {
        if(bookId.equals(0L)) {
            return ratingService.findAllRatings();
        }
        return ratingService.findRatingsByBookId(bookId);
    }

    @PostMapping
    public Rating createRating(@RequestBody Rating rating) {
        return ratingService.createRating(rating);
    }

    @DeleteMapping("/{ratingId}")
    public void deleteRating(@PathVariable Long ratingId) {
        ratingService.deleteRating(ratingId);
    }

    @PutMapping("/{ratingId}")
    public Rating updateRating(@RequestBody Rating rating, @PathVariable Long ratingId){
        return ratingService.updateRating(rating, ratingId);
    }

    @PatchMapping("/{ratingId}")
    public Rating updateRating(@RequestBody Map<String, String> updates, @PathVariable Long ratingId) {
        return ratingService.updateRating(updates, ratingId);
     }
 }

请注意,在这里我们并不关注持久性 - 主要重点是让API接口暴露出来。

这些API中的每一个都有自己的单独的引导程序,而且其部署完全独立于其他任何东西。

当在本地部署时,API将可在以下位置获得:

http://localhost:8080/book-service/books
http://localhost:8080/rating-service/ratings

猜你喜欢

转载自blog.csdn.net/qq_24091555/article/details/77118782