javascript
aws dynamodb_带有AWS DynamoDB的React式Spring Webflux
aws dynamodb
AWS已經發布了Java版本2的AWS開發工具包 ,該開發工具包現在支持針對不同AWS服務的API調用的非阻塞IO。 在本文中,我將探討如何使用AWS開發工具包2.x的DynamoDB API以及如何使用Spring Webflux堆棧公開響應式端點-這種方式,應用程序是端對端響應式的,大概應該非常有效地使用資源(我有計劃在此設置上做一些測試作為后續步驟)。
申請詳情
簡單地看一下代碼并在那兒遵循它可能會更容易-在我的GitHub存儲庫中可以找到它。
該應用程序很簡單-可以對使用以下Kotlin代碼表示的酒店實體執行CRUD操作:
data class Hotel(val id: String = UUID.randomUUID().toString(),val name: String? = null,val address: String? = null,val state: String? = null,val zip: String? = null )我想公開端點以保存和檢索酒店實體,并按州獲取酒店列表。
AWS開發工具包2的詳細信息
AWS SDK 2 api的所有軟件包名稱現在都以“ software.amazon.awssdk”前綴開頭,使用以下幾行代碼創建與DynamoDB進行交互的客戶端:
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider import software.amazon.awssdk.regions.Region import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClientval client: DynamoDbAsyncClient = DynamoDbAsyncClient.builder().region(Region.of(dynamoProperties.region)).credentialsProvider(DefaultCredentialsProvider.builder().build()).build()創建DynamoDbAsyncClient實例后,使用此客戶端的任何操作都將返回Java 8 CompletableFuture類型。 例如。 保存酒店實體時:
val putItemRequest = PutItemRequest.builder().tableName("hotels").item(HotelMapper.toMap(hotel)).build()val result: CompletableFuture<PutItemResponse> =dynamoClient.putItem(putItemRequest)并通過ID檢索記錄:
val getItemRequest: GetItemRequest = GetItemRequest.builder().key(mapOf(Constants.ID to AttributeValue.builder().s(id).build())).tableName(Constants.TABLE_NAME).build()val response: CompletableFuture<GetItemResponse> = dynamoClient.getItem(getItemRequest)CompletableFuture提供了一組全面的功能,以在可用時轉換結果。
與Spring Webflux集成
Spring Webflux是一個React式Web框架。 現在,借助AWS開發工具包2中的非阻塞IO支持,可以使用DynamoDB編寫端到端的響應式和非阻塞應用程序。 Spring Webflux使用React堆核心提供React流支持,與AWS開發工具包2集成的技巧是將Java 8 CompletableFuture轉換為React堆核心類型,方法是通過id從DynamoDB檢索項目時采用以下方式:
val getItemRequest: GetItemRequest = GetItemRequest.builder().key(mapOf(Constants.ID to AttributeValue.builder().s(id).build())).tableName(Constants.TABLE_NAME).build()return Mono.fromCompletionStage(dynamoClient.getItem(getItemRequest)).map { resp ->HotelMapper.fromMap(id, resp.item())}Spring Webflux期望不同Web終結點方法簽名的返回類型為響應類型,因此,用于說出酒店列表的典型終結點如下:
@RequestMapping(value = ["/hotels"], method = [RequestMethod.GET]) fun getHotelsByState(@RequestParam("state") state: String): Flux<Hotel> {return hotelRepo.findHotelsByState(state) }Spring Webflux還支持一種描述應用程序API的功能性方法,因此,一個等效的API可通過其ID來檢索酒店,但表示為功能性DSL如下:
@Configuration class HotelAdditionalRoutes {@Beanfun routes(hotelRepo: HotelRepo) = router {GET("/hotels/{id}") { req ->val id = req.pathVariable("id")val response: Mono<ServerResponse> = hotelRepo.getHotel(id).flatMap { hotel ->ServerResponse.ok().body(BodyInserters.fromObject(hotel))}response.switchIfEmpty(ServerResponse.notFound().build())}} }結論
AWS SDK 2使編寫端到端的React性和非阻塞性應用程序變得簡單。 我已經使用Spring Webflux和AWS SDK 2發電機客戶端在此處編寫了這樣的應用程序。 完整的工作示例可在我的GitHub存儲庫中找到-https ://github.com/bijukunjummen/boot-with-dynamodb,其中包含有關如何啟動DynamoDB本地版本并將其用于測試應用程序的說明。
翻譯自: https://www.javacodegeeks.com/2018/12/reactive-spring-webflux-aws-dynamodb.html
aws dynamodb
總結
以上是生活随笔為你收集整理的aws dynamodb_带有AWS DynamoDB的React式Spring Webflux的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试反模式冰激凌模式的不足_单元测试反模
- 下一篇: xyz域名怎么备案(xyz域名备案 腾讯