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是一个反应式Web框架。 现在,借助AWS开发工具包2中的非阻塞IO支持,可以使用DynamoDB编写端到端的响应式和非阻塞应用程序。 Spring Webflux使用反应堆核心提供反应流支持,与AWS开发工具包2集成的技巧是将Java 8 CompletableFuture转换为反应堆核心类型,方法是通过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使编写端到端反应性和非阻塞应用程序变得简单。 我已使用Spring Webflux和AWS开发工具包2发电机客户端在此处编写此类应用程序。 整个工作示例可在我的GitHub存储库中找到-https ://github.com/bijukunjummen/boot-with-dynamodb,其中包含有关如何启动DynamoDB本地版本并将其用于测试应用程序的说明。

翻译自: https://www.javacodegeeks.com/2018/12/reactive-spring-webflux-aws-dynamodb.html

带有AWS DynamoDB的反应式Spring Webflux相关推荐

  1. aws dynamodb_带有AWS DynamoDB的React式Spring Webflux

    aws dynamodb AWS已经发布了Java版本2的AWS开发工具包 ,该开发工具包现在支持针对不同AWS服务的API调用的非阻塞IO. 在本文中,我将探讨如何使用AWS开发工具包2.x的Dyn ...

  2. 响应式Spring Cloud初探

    响应式Spring Cloud初探 分类:工程 原文链接:The Road to Reactive Spring Cloud 作者:  JOSH LONG 译者: helloworldtang 日期: ...

  3. 使用Spring WebFlux从Corda节点流式传输数据

    自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. 更具体地说 ...

  4. Spring WebFlux – SpringReact式编程

    Spring WebFlux is the new module introduced in Spring 5. Spring WebFlux is the first step towards re ...

  5. (6)Spring WebFlux性能测试——响应式Spring的道法术器

    本系列其他文章见:<响应式Spring的道法术器>. 前情提要:Reactor快速上手 | Spring WebFlux快速上手 本文源码 1.4 从负载测试看异步非阻塞的优势 前面总是& ...

  6. corda_使用Spring WebFlux从Corda节点流式传输数据

    corda 自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. ...

  7. Spring WebFlux 响应式编程学习笔记(一)

    各位Javaer们,大家都在用SpringMVC吧?当我们不亦乐乎的用着SpringMVC框架的时候,Spring5.x又悄(da)无(zhang)声(qi)息(gu)的推出了Spring WebFl ...

  8. SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器

    SpringBoot2.1.15(26) WebFlux快速上手--响应式Spring的道法术器 Spring WebFlux Spring WebFlux是随Spring 5推出的响应式Web框架. ...

  9. Spring Boot 3.x 系列【23】集成Spring WebFlux开发响应式应用程序

    有道无术,术尚可求,有术无道,止于术. 本系列Spring Boot版本3.0.4 源码地址:https://gitee.com/pearl-organization/study-spring-boo ...

最新文章

  1. golang 反射 获取 设置 结构体 字段值
  2. k近邻算法原理c语言,实验二 K-近邻算法及应用
  3. HDU - 2732 Leapin' Lizards(最大流+思维建边)
  4. 听歌也能倍速了!网易云音乐PM怎么想的?
  5. 网站图片下载 Python
  6. Docker 镜像使用(拉取、查看、使用、删除)
  7. 三个方法教你做词云图,连文科生都能轻松学会
  8. 点击按钮返回上一个页面_零基础跟老陈一起学WordPress 《第四课》用WP半小时建一个商业网站...
  9. xv6实验课程:Xv6和Unix实用程序
  10. 《简明python教程》沈洁元
  11. C++中优先队列priority_queue的基础用法
  12. 统计学习之第四天(可汗学院公开课:统计学)
  13. 怎么样优化可以避免百度的冰桶算法?
  14. 王者荣耀游戏高清壁纸(手机|电脑),来袭
  15. 【退役贴】再见了ACM,再会了算法竞赛
  16. animate将flash转换html,【An教程】快速入门Animate(原Adobe Flash)
  17. windows workflow foundation(WWF)学习记录
  18. matlab错误: 服务器出现意外情况。
  19. [影评]一刀倾城(附相关评论及剧中部分台词各一)
  20. python使用py2neo操作neo4j

热门文章

  1. 【DP】【四边形不等式】邮局(P4767)
  2. 【DP】【记忆化搜索】NIKOLA(jzoj 1150)
  3. HDU5129 - Yong Zheng's Death
  4. codeforces gym-101745 D-Stamp Stamp Stamp动态规划
  5. codeforces gym-101745 C-Infinite Graph Game 分块
  6. 【git】如何给github绑定ssh
  7. 不一样的假期,到底哪里不一样?
  8. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
  9. java异常 字节码,Java字节码角度分析异常处理
  10. windows监控txt写入_Windows的bug们