日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

弹簧活性样品

發(fā)布時(shí)間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 弹簧活性样品 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring-Reactive旨在為基于Spring的項(xiàng)目帶來(lái)響應(yīng)式編程支持 ,并且有望在Spring 5的時(shí)間表中提供。 我的意圖是使用此模型為REST端點(diǎn)行使一些非常基本的簽名。

在繼續(xù)之前,請(qǐng)?jiān)试S我確認(rèn)整個(gè)樣本完全基于塞巴斯蒂安·德勒茲(SébastienDeleuze) 在這里匯總的樣本– https://github.com/sdeleuze/spring-reactive-playground

我想考慮三個(gè)示例,首先是現(xiàn)有Java 8 CompletableFuture作為類型返回的情況,其次是RxJava的Observable作為類型返回的情況,其次是Spring Reactor Core的 Flux類型的情況。

預(yù)期協(xié)議

這三個(gè)服務(wù)中的每一個(gè)處理的請(qǐng)求和響應(yīng)消息的結(jié)構(gòu)都遵循以下幾行,它們?nèi)繉⒔邮芤粋€(gè)如下所示的請(qǐng)求:

{"id":1,"delay_by": 2000,"payload": "Hello","throw_exception": false }

delay_by將使響應(yīng)延遲,throw_exception將使對(duì)錯(cuò)誤的響應(yīng)消失。 合理的響應(yīng)如下:

{"id": "1","received": "Hello","payload": "Response Message" }

我將忽略此職位的例外情況。

CompletableFuture作為返回類型

考慮一個(gè)返回java 8 CompletableFuture作為返回類型的服務(wù):

public CompletableFuture<MessageAcknowledgement> handleMessage(Message message) {return CompletableFuture.supplyAsync(() -> {Util.delay(message.getDelayBy());return new MessageAcknowledgement(message.getId(), message.getPayload(), "data from CompletableFutureService");}, futureExecutor); }

現(xiàn)在,調(diào)用此服務(wù)的Controller的方法簽名如下所示:

@RestController public class CompletableFutureController {private final CompletableFutureService aService;@Autowiredpublic CompletableFutureController(CompletableFutureService aService) {this.aService = aService;}@RequestMapping(path = "/handleMessageFuture", method = RequestMethod.POST)public CompletableFuture<MessageAcknowledgement> handleMessage(@RequestBody Message message) {return this.aService.handleMessage(message);}}

當(dāng)CompletableFuture完成時(shí),框架將確保適當(dāng)?shù)卣眄憫?yīng)。

Rx Java可觀察為返回類型

考慮將Rx Java Observable作為返回類型返回的服務(wù):

public Observable<MessageAcknowledgement> handleMessage(Message message) {logger.info("About to Acknowledge");return Observable.just(message).delay(message.getDelayBy(), TimeUnit.MILLISECONDS).flatMap(msg -> {if (msg.isThrowException()) {return Observable.error(new IllegalStateException("Throwing a deliberate exception!"));}return Observable.just(new MessageAcknowledgement(message.getId(), message.getPayload(), "From RxJavaService"));}); }

調(diào)用此類服務(wù)??的控制器現(xiàn)在可以直接將Observable作為類型返回,并且框架將確保一旦發(fā)出所有項(xiàng)目,響應(yīng)就會(huì)正確地編組。

@RestController public class RxJavaController {private final RxJavaService aService;@Autowiredpublic RxJavaController(RxJavaService aService) {this.aService = aService;}@RequestMapping(path = "/handleMessageRxJava", method = RequestMethod.POST)public Observable<MessageAcknowledgement> handleMessage(@RequestBody Message message) {System.out.println("Got Message..");return this.aService.handleMessage(message);}}

請(qǐng)注意,由于Observable表示0到許多項(xiàng)目的流,因此這次響應(yīng)是一個(gè)json數(shù)組。

Spring Reactor Core Flux作為返回類型

最后,如果響應(yīng)類型是Flux類型,則框架確保響應(yīng)被干凈處理。 該服務(wù)遵循以下原則:

public Flux<messageacknowledgement> handleMessage(Message message) {return Flux.just(message).delay(Duration.ofMillis(message.getDelayBy())).map(msg -> Tuple.of(msg, msg.isThrowException())).flatMap(tup -> {if (tup.getT2()) {return Flux.error(new IllegalStateException("Throwing a deliberate Exception!"));}Message msg = tup.getT1();return Flux.just(new MessageAcknowledgement(msg.getId(), msg.getPayload(), "Response from ReactorService"));}); }

以及使用此類服務(wù)??的控制器:

@RestController public class ReactorController {private final ReactorService aService;@Autowiredpublic ReactorController(ReactorService aService) {this.aService = aService;}@RequestMapping(path = "/handleMessageReactor", method = RequestMethod.POST)public Flux<MessageAcknowledgement> handleMessage(@RequestBody Message message) {return this.aService.handleMessage(message);}}

結(jié)論

這只是Spring Reactive項(xiàng)目支持的返回類型的示例,可能的返回類型遠(yuǎn)不止于此–這里是一個(gè)更全面的示例。

我期待反應(yīng)式編程模型在核心Spring框架中可用。

我的github存儲(chǔ)庫(kù)中提供了此博客文章中提供的示例

翻譯自: https://www.javacodegeeks.com/2016/06/spring-reactive-samples.html

總結(jié)

以上是生活随笔為你收集整理的弹簧活性样品的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。