1. 程式人生 > >A Microservice Architecture with Spring Boot and Spring Cloud(一)

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