Vi phục vụ ứng dụng - cơ vu Spring Cloud hòa Reactor cấu kiến võng thượng thương điếm vi phục vụ ( hạ )

Tiền ngôn

Thượng thiên chủ yếu thị giảng giải lý luận tri thức hòa hạng mục giá cấu yếu điểm, giá thiên tương tập trung tại vi phục vụ trung sử dụng Spring Boot, Spring Cloud hòa Project Reactor thật hiện sự kiện tố nguyên đích nguyên thủy chủ đề. Văn chương trung dã hội giới thiệu hạng mục thật hiện nhất ta kỹ thuật tế tiết, hạng mục Git hạ tái địa chỉ:https://github.com/kbastani/spring-cloud-event-sourcing-example,Hạng mục ngã tự kỷ dĩ kinh vận hành liễu nhất biến, phi thường thích hợp học tập sử dụng. Hạ diện thị nguyên văn phiên dịch nội dung:

Project Reactor

Project Reactor thị nhất cá khai nguyên cơ vu JVM thật hiện Reactive lưu quy phạm đích khai phát khuông giá, thị Spring sinh thái hệ thống nhất cá thành viên, tại vi phục vụ trung, kinh thường tại nhất cá thượng hạ văn hạ nhu yếu hòa kỳ tha vi phục vụ giao hỗ thao tác, do vu vi phục vụ giá cấu thiên nhiên chúc tính thị tối chung nhất trí tính, nhi tối chung nhất trí tính tịnh bất bảo chứng sổ cư đích an toàn tính. Tha đề cung ngã môn nhất cá sử dụng dị bộ phi đổ tắc phương thức tiến hành thông tấn đích phương thức, giá lí chính thị sử dụng Reactor mục đích sở tại.

Ngận thiếu tình huống hạ, lĩnh vực mô hình trạng thái hội bị khóa vi phục vụ cộng hưởng, đãn thị như quả tại vi phục vụ chi gian nhu yếu cộng hưởng trạng thái chẩm ma bạn? Hoặc giả thuyết đa cá vi phục vụ nhu yếu phóng vấn đồng nhất cá sổ cư khố sổ cư biểu chẩm ma bạn? Tại vi phục vụ trung ES chỉ bảo tồn hữu tự sự kiện đích nhật chí, sử dụng sự kiện lưu thủ đại lĩnh vực mô hình tại sổ cư khố trung tồn trữ, ngã môn khả dĩ tồn trữ hữu tự sự kiện lưu lai đại biểu đối tượng đích trạng thái, giá dạng, ý vị trứ ngã môn tựu bất tái sử dụng cơ vu HTTP đích RESTful tiến hành vi phục vụ chi gian đồng bộ thông tấn, giá ta đồng bộ hội tạo thành đổ tắc hòa tính năng diên trì.

Reactor vi hạch tâm đích sự kiện tố nguyên

Tại võng thượng thương điếm đích vi phục vụ chi nhất thị cấu vật xa phục vụ ( Shopping Cart Service ), dĩ nghiệm chứng đích dụng hộ tòng thương điếm Web ứng dụng trình tự đích dụng hộ giới diện lưu lãm sản phẩm mục lục. Dụng hộ khả dĩ thiêm gia hòa san trừ tha môn đích cấu vật xa đích thương phẩm điều mục, dĩ cập thanh trừ tha môn đích cấu vật xa hoặc kết trướng.


Nhất cá dụng hộ đích cấu vật xa vi như hà thật hiện sự kiện truy tố công tác miêu hội liễu nhất cá giản đan đích dạng lệ. Ngã môn dĩ võng thượng thương điếm trung cấu vật xa phục vụ vi án lệ, triển kỳ Reactor + ES thị như hà thật hiện đích:

Cấu vật xa phục vụ Shopping Cart Service thị nhất cá MYSQL sổ cư khố ủng hữu giả, hữu nhất cá sổ cư biểu xưng vi cart_event. Giá cá biểu bao hàm dụng hộ thao tác động tác sản sinh đích hữu tự sự kiện nhật chí, dụng hộ thao tác tựu thị phản phục tương thương phẩm gia nhập cấu vật xa hoặc khứ trừ đẳng các chủng cấu vật xa quản lý thao tác.

Example 1. CartEventType.java
// These will be the events that are stored in the event log for a cart
public enum CartEventType {
ADD_ITEM,
REMOVE_ITEM,
CLEAR_CART,
CHECKOUT
}

CartEventType thị mai cử loại hình, dĩ kinh liệt xuất liễu 4 chủng bất đồng đích sự kiện loại hình. Giá ta sự kiện loại hình trung đích mỗi nhất cá đô đại biểu dụng hộ tại cấu vật xa thượng chấp hành đích động tác. Căn cư ES, giá ta cấu vật xa sự kiện khả dĩ ảnh hưởng dụng hộ đích cấu vật xa đích tối chung trạng thái kết quả. Đương dụng hộ thiêm gia hoặc san trừ nhất cá thương phẩm điều mã đáo tha môn đích cấu vật xa thời, nhất cá động tác sản sinh nhất cá sự kiện, hội đối cấu vật xa trung tiến hành đệ tăng hoặc đệ giảm nhất hành điều mục. Đương giá ta sự kiện sử dụng đồng dạng thuận tự tiến hành hồi phóng thời, đồng dạng nhất hệ liệt đích điều mục hội bị trọng tân sang kiến hoặc san trừ:

id created_at last_modified cart_event_type product_id quantity user_id
1 1460990971645 1460990971645 0 SKU-12464 2 0
2 1460992816398 1460992816398 1 SKU-12464 1 0
3 1460992826474 1460992826474 0 SKU-12464 2 0
4 1460992832872 1460992832872 0 SKU-12464 2 0
5 1460992836027 1460992836027 1 SKU-12464 5 0
Ngã môn khán đáo mỗi hành đô hữu nhất cá duy nhất thời gian trạc lai xác bảo nghiêm cách thuận tự, sử dụng chỉnh sổ lai đại biểu 4 cá cấu vật xa sự kiện loại hình, product_id hòa sổ cư quantity đô thị mỗi thứ gia nhập cấu vật xa đích thương phẩm điều mã tín tức.


Giá nhất kết quả hiển kỳ tại thượng diện đích tiệt đồ, tại giá lí, ngã môn khán đáo nhất cá dụng hộ đích cấu vật xa, sinh thành tác vi nhất cá tổng kết quả tập đích đối tượng.

Tuyển trạch sự kiện tồn trữ khố

Đương tuyển trạch sự kiện truy tố đích thích đương tồn trữ tuyển hạng thời, hữu ngận đa khả dụng đích tuyển hạng. Kim thiên kỉ hồ sở hữu đích sổ cư khố đô năng đề cung sổ cư lưu tra tuân công năng đích công tác, nhiên nhi, hữu nhất ta lưu hành đích khai nguyên hạng mục, tại giá phương diện hữu trứ đột xuất đích ưu điểm. Hiện tại Event Sourcing tiêu chuẩn đích tồn trữ khố thị Apache Kafka, vi phục vụ chi gian cộng hưởng trạng thái thị thông quá cộng hưởng Kafka đích sự kiện nhật chí thật hiện đích, giá thị nhất cá vị lai bác khách đích chủ đề. Tại giá cá lệ tử trung ngã môn tương sử dụng MySQL, giá thị thật hiện sự kiện truy tố nhất cá tại tuyến cấu vật xa đích bất thác tuyển trạch.

Nâm đích sự kiện tồn trữ kỹ thuật đích tuyển trạch tương vĩnh viễn thủ quyết vu tả nhập đích sổ lượng hòa nâm đích sổ cư khố đích thôn thổ lượng. Tượng Apache Kafka thiết kế liễu tinh xác đích sử dụng tình huống, khước yếu cầu ngã môn thừa đam nhất ta ngạch ngoại đích công tác trách nhậm khứ tại sinh sản trung khoách triển, bao quát vận hành Apache ZooKeeper tập quần.

Sinh thành tụ hợp

Hạ diện ngã môn hồi đáo cấu vật xa, cấu vật xa vi phục vụ đề cung nhất cá REST API phương pháp tiếp thụ lai tự Web đoan đích sự kiện. Web đoan phát xuất sự kiện đích khống chế khí ShoppingCartControllerV1.java

Example 2. ShoppingCartControllerV1.java
@RequestMapping(path = "/events", method = RequestMethod.POST)
public ResponseEntity addCartEvent(@RequestBody CartEvent cartEvent) throws Exception {
return Optional.ofNullable(shoppingCartService.addCartEvent(cartEvent))
.map(event -> new ResponseEntity(HttpStatus.NO_CONTENT))
.orElseThrow(() -> new Exception( "Could not find shopping cart" ));
}
Tại thượng diện đích đại mã kỳ lệ, ngã môn định nghĩa liễu nhất cá dụng vu thu tập lai tự khách hộ đoan tân đích CartEvent đối tượng đích khống chế khí phương pháp. Giá chủng phương pháp đích mục đích thị tại hướng sự kiện nhật chí truy gia sự kiện. Đương khách hộ đoan điều dụng REST API kiểm tác dụng hộ đích cấu vật xa, tha tương sản sinh nhất cá cấu vật xa tụ hợp, sử dụng Reactive lưu hợp tịnh liễu sở hữu cấu vật xa sự kiện lưu.

Hạ diện tại ShoppingCartServiceV1.java trung sử dụng Reactor sản sinh cấu vật xa sự kiện lưu:

Example 3. ShoppingCartServiceV1.java
public ShoppingCart aggregateCartEvents(User user, Catalog catalog) throws Exception {

// Create a reactive streams publisher by streaming ordered events from the database
Flux<CartEvent> cartEvents =
Flux.fromStream(cartEventRepository.getCartEventStreamByUser(user.getId()));

// Aggregate the current state of the shopping cart until arriving at a terminal state in the stream
ShoppingCart shoppingCart = cartEvents
.takeWhile(cartEvent ->!ShoppingCart.isTerminal(cartEvent.getCartEventType()))
.reduceWith(() -> new ShoppingCart(catalog), ShoppingCart::incorporate)
.get();

// Generate the list of line items in the cart from the aggregate
shoppingCart.getLineItems();

return shoppingCart;
}

Tại thượng diện đích đại mã kỳ lệ trung, ngã môn khả dĩ khán đáo tam cá bộ sậu lai sinh thành cấu vật xa đối tượng, nhiên hậu phản hồi đáo khách hộ đoan. Đệ nhất bộ thị tòng sự kiện tồn trữ đích sổ cư nguyên trung sang kiến nhất cá Reactive lưu. Nhất đán lưu kiến lập, ngã môn khả dĩ tòng sự kiện lưu trung sản sinh ngã môn đích tụ hợp. Giá ta sự kiện lưu bất đoạn cải biến cấu vật xa trạng thái trực chí đáo tối chung trạng thái, nhiên hậu tựu khả dĩ tương tối chung cấu vật phản hồi cấp dụng hộ khách hộ đoan.

Vi liễu giảm thiếu reactive lưu đích tụ hợp, ngã môn sử dụng liễu nhất cá xưng vi incorporate phương pháp, giá cá phương pháp thị tiếp thụ CartEvent đối tượng, nhi CartEvent đối tượng thị dụng lai cải biến cấu vật xa trạng thái đích.

Example 4. ShoppingCart.java
public ShoppingCart incorporate(CartEvent cartEvent) {

// Remember that thing about safety properties in microservices?
Flux<CartEventType> validCartEventTypes =
Flux.fromStream(Stream.of(CartEventType.ADD_ITEM,
CartEventType.REMOVE_ITEM));

// The CartEvent's type must be either ADD_ITEM or REMOVE_ITEM
if (validCartEventTypes.exists(cartEventType ->
cartEvent.getCartEventType().equals(cartEventType)).get()) {

// Update the aggregate view of each line item's quantity from the event type
productMap.put(cartEvent.getProductId(),
productMap.getOrDefault(cartEvent.getProductId(), 0) +
(cartEvent.getQuantity() * (cartEvent.getCartEventType()
.equals(CartEventType.ADD_ITEM)? 1: -1)));
}

// Return the updated state of the aggregate to the reactive stream's reduce method
return this;
}
Tại thượng diện đại mã trung ngã môn khán đáo ShoppingCart đích incorporate phương pháp thật hiện, ngã môn tiếp thụ nhất cá CartEvent đối tượng nhiên hậu tố tối trọng yếu đích nhất kiện sự: Xác bảo sự kiện loại hình thị chính xác đích. Giá thị tại vi phục vụ nhu yếu tự do dữ tha môn đích đan nguyên trắc thí, tại tối chung nhất trí đích giá cấu, dĩ xác bảo trạng thái đột biến tương xác bảo sổ cư đích chính xác tính. Tại bổn lệ trung, ngã môn xác bảo sự kiện loại hình thị ADD_ITEM hoặc REMOVE_ITEM.

Hạ nhất bộ thị canh tân cấu vật xa trung mỗi cá điều mục đích tụ hợp thị đồ, thông quá ánh xạ tương ứng đích sự kiện loại hình đáo thương phẩm điều mục đích sổ lượng đệ tăng hoặc đệ giảm. Tối hậu ngã môn phản hồi giá dạng nhất cá đái hữu tối chung khả biến trạng thái đích cấu vật xa cấp khách hộ đoan.

Docker Compose diễn kỳ

Kỳ lệ hạng mục sử dụng Docker Compose cấu kiến hòa vận hành, mỗi cá vi phục vụ đích dung khí kính tượng đô tác vi Maven biên dịch quá trình đích nhất bộ phân.

Nhập môn

Thủ tiên, phóng vấn cai kỳ lệ hạng mục đích GitHub khố:

https://github.com/kbastani/spring-cloud-event-sourcing-example

Khắc long hoặc phục chế hạng mục tịnh tương tồn trữ khố hạ tái đáo nâm đích cơ khí thượng. Hạ tái hậu, nâm tương nhu yếu sử dụng Maven hòa Docker lai biên dịch hòa cấu kiến bổn địa kính tượng.

Hạ tái Docker

Thủ tiên, như quả nhĩ hoàn một hữu hạ tái Docker. Khả tuân tuần giá lí đích chỉ kỳ https://www.docker.com/docker-toolbox, bả Docker toolbox tại nhĩ đích khai phát cơ khí thượng vận hành.

Tại nhĩ an trang liễu Docker toolbox dĩ hậu, vận hành hạ diện đích mệnh lệnh lai sơ thủy hóa giá cá kỳ lệ ứng dụng trình tự đích nhất cá tân đích VirtualBox hư nghĩ cơ.

$ docker-machine create env event-source-demo --driver virtualbox --virtualbox-memory "11000" --virtualbox-disk-size "100000"
$ eval "$(docker-machine env event-source-demo)"

Hoàn cảnh yếu cầu

Năng cú vận hành thật lệ trình tự, nhu yếu tại nhĩ đích khai phát cơ thượng an trang hạ diện đích nhuyễn kiện:

  • Maven 3
  • Java 8
  • Docker
  • Docker Compose

Cấu kiến hạng mục

Thông quá mệnh lệnh hành phương thức lai cấu kiến đương tiền hạng mục, tại hạng mục đích căn mục lục trung vận hành như hạ đích mệnh lệnh:

$ sh run.sh
Cai hạng mục tương hạ tái sở hữu sở nhu đích y lại quan hệ, tịnh biên dịch mỗi nhất cá hạng mục đích tổ kiện. Mỗi cá phục vụ đô tương bị cấu kiến, nhiên hậu nhất cá Maven Docker sáp kiện hội tự động cấu kiến mỗi cá kính tượng đáo nhĩ đích bổn địa Docker chú sách biểu lí. Tại căn mục lục vận hành mệnh lệnh chi tiền, nhất định yếu bảo chứng Docker chính thường vận hành, chỉ hữu giá dạng, nhĩ đích sh run.sh mệnh lệnh tài hội cấu kiến thành công.

Docker Compose khải động tập quần

Hiện tại, mỗi cá kính tượng đô dĩ kinh đáp kiến thành công, ngã môn khả dĩ sử dụng Docker Compose khoái tốc khải động tập quần. run.sh cước bổn tương kiến lập mỗi cá hạng mục hòa Docker dung khí, tịnh sử dụng Docker Compose khai khải mỗi cá phục vụ. Trị đắc chú ý đích thị, tập quần nhu yếu thủ tiên khải động đích phục vụ thị phối trí phục vụ hòa phát hiện phục vụ. Kỳ dư đích phục vụ tại khai thủy khải động, tịnh tối chung khai thủy tương hỗ câu thông.

Ngã cường liệt kiến nghị nhĩ vận hành thử kỳ lệ đích cơ khí thượng chí thiếu 16GB đích hệ thống nội tồn.

Nhất đán khải động tự liệt hoàn thành hậu, nhĩ khả dĩ lưu lãm đáo Eureka chủ cơ hòa khán đáo phát hiện phục vụ lí chú sách đích sở hữu phục vụ. Phục chế tịnh niêm thiếp dĩ hạ mệnh lệnh đáo chung đoan, Docker khả dĩ sử dụng $DOCKER_HOST hoàn cảnh biến lượng tiến hành phóng vấn.

$ open $(echo \ "$(echo $DOCKER_HOST)\" |
\sed 's/tcp:\/\//http:\/\//g'|
\sed 's/[0-9]\{4,\}/8761/g'|
\sed 's/\ "//g')
Như quả Eureka chính xác đích khải động, lưu lãm khí tương hội khải động tịnh đả khai Eureka phục vụ đích nghi biểu bàn, như hạ đồ sở kỳ:


Đương sở hữu đích ứng dụng trình tự tại Eureka thượng dĩ kinh hoàn thành khải động hòa chú sách, nhĩ khả dĩ sử dụng dĩ hạ mệnh lệnh phóng vấn võng thượng thương điếm đích Web ứng dụng.

$ open $(echo \ "$(echo $DOCKER_HOST)\" |
\sed 's/tcp:\/\//http:\/\//g'|
\sed 's/[0-9]\{4,\}/8787/g'|
\sed 's/\ "//g')

Ứng dụng trình tự khải động khả năng nhu yếu nhất ta thời gian, sở dĩ thỉnh xác bảo nhĩ mỗi cách kỉ phân chung xoát tân dụng hộ giới diện, trực đáo khán kiến sản phẩm mục lục.


Yếu khai thủy hướng cấu vật xa thiêm gia sản phẩm, nâm nhu yếu đăng lục mặc nhận dụng hộ. Đan kích Login án nữu, nhĩ tương bị trọng định hướng đáo thân phân nghiệm chứng võng quan hiệt diện, tại thử hiệt diện nhĩ khả dĩ sử dụng dụng hộ đích mặc nhận bằng cư hòa mật mã tiến hành đăng lục.


Đăng lục thành công hậu, nhĩ tương bị trọng định hướng đáo nhu yếu thân phân nghiệm chứng tài năng trình hiện đích chủ hiệt diện thượng, tịnh khả dĩ khai thủy quản lý nhĩ đích cấu vật xa trung đích hạng mục.


Tổng kết

Tại giá thiên văn chương trung, ngã môn ngận nan khán đáo tại vi phục vụ giá cấu trung đích cao khả dụng tính hòa sổ cư nhất trí tính đích thiêu chiến. Ngã môn kỳ đãi nhất cá hoàn chỉnh đích võng thượng thương điếm nguyên sinh vân ứng dụng trình tự, năng tác vi nhất hệ liệt vi phục vụ đích tập hợp, sử dụng sự kiện truy tố bảo trì nhất trí đích thế giới quan, đồng thời hoàn bảo chứng cao khả dụng tính.

Tại tiếp hạ lai đích bác khách, ngã tương kế tục tham tác như hà tại sự kiện truy tố trung sử dụng Spring Cloud Stream hòa dụng Apache Kafka đối sự kiện lưu xử lý.

Đặc biệt cảm tạ

Tỉnh lược.


  • 1
    Điểm tán
  • Thải
  • 11
    Thu tàng
    Giác đắc hoàn bất thác? Nhất kiện thu tàng
  • 9
    Bình luận
Bình luận9
Thiêm gia hồng bao

Thỉnh điền tả hồng bao chúc phúc ngữ hoặc tiêu đề

Hồng bao cá sổ tối tiểu vi 10 cá

Nguyên

Hồng bao kim ngạch tối đê 5 nguyên

Đương tiền dư ngạch3.43Nguyên Tiền vãng sung trị >
Nhu chi phó:10.00Nguyên
Thành tựu nhất ức kỹ thuật nhân!
Lĩnh thủ hậu nhĩ hội tự động thành vi bác chủ hòa hồng bao chủ đích phấn ti Quy tắc
hope_wisdom
Phát xuất đích hồng bao
Thật phóNguyên
Sử dụng dư ngạch chi phó
Điểm kích trọng tân hoạch thủ
Tảo mã chi phó
Tiền bao dư ngạch 0

Để khấu thuyết minh:

1. Dư ngạch thị tiền bao sung trị đích hư nghĩ hóa tệ, án chiếu 1:1 đích bỉ lệ tiến hành chi phó kim ngạch đích để khấu.
2. Dư ngạch vô pháp trực tiếp cấu mãi hạ tái, khả dĩ cấu mãi VIP, phó phí chuyên lan cập khóa trình.

Dư ngạch sung trị