A Microservice Architecture with Spring Boot and Spring Cloud(一)
阿新 • • 發佈:2018-12-17
前段日子,就有個想法,打算翻譯一些關於SpringBoot的文件資料。後來在學習SpringBoot中,無意發現一本SpringBoot與SpringCloud微服務架構入門級的書籍,感覺不錯,決定拿它作為我職業生涯翻譯的第一本技術書。
《A Microservice Architecture with Spring Boot and Spring Cloud》,一個由SpringBoot與SpringCloud組成的微服務架構,該書籍來源Baeldung 網站,各位可以常去該網站瀏覽,裡面有大量關於Spring家族的文件資料。
由於個人不是專業翻譯,過程中難免有謬誤之處,如果發現任何語句翻譯錯誤,請在我的部落格留言,我會盡快處理。
目錄:
- 概述
- 資源
- REST API
- 安全配置
- SpringCloud配置
5.1服務配置
5.2服務發現
5.3閘道器服務
5.4REST APIs - 會話配置
- REST API測試
- 執行
- 總結
概述
在本指南中,我們將專注於建立一個簡單且正常執行,由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