mfc 弹簧_弹簧活性样品
mfc 彈簧
Spring-Reactive旨在為基于Spring的項目帶來響應式編程支持 ,并且有望在Spring 5的時間表中提供。 我的意圖是使用此模型為REST端點行使一些非常基本的簽名。
在繼續之前,請允許我確認整個樣本完全基于塞巴斯蒂安·德勒茲(SébastienDeleuze) 在這里匯總的樣本– https://github.com/sdeleuze/spring-reactive-playground
我想考慮三個示例,首先是現有Java 8 CompletableFuture作為類型返回的情況,其次是RxJava的Observable作為類型返回的情況,其次是Spring Reactor Core的 Flux類型的情況。
預期協議
這三個服務中的每一個處理的請求和響應消息的結構都遵循以下幾行,它們都將接收如下所示的請求:
{"id":1,"delay_by": 2000,"payload": "Hello","throw_exception": false }delay_by將使響應延遲,throw_exception將使對錯誤的響應消失。 合理的響應如下:
{"id": "1","received": "Hello","payload": "Response Message" }我將忽略此職位的例外情況。
CompletableFuture作為返回類型
考慮一個返回java 8 CompletableFuture作為返回類型的服務:
public CompletableFuture<MessageAcknowledgement> handleMessage(Message message) {return CompletableFuture.supplyAsync(() -> {Util.delay(message.getDelayBy());return new MessageAcknowledgement(message.getId(), message.getPayload(), "data from CompletableFutureService");}, futureExecutor); }現在,調用此服務的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);}}當CompletableFuture完成時,框架將確保將響應適當地編組。
Rx Java可觀察為返回類型
考慮將Rx Java Observable作為返回類型返回的服務:
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"));}); }調用此類服務??的控制器現在可以直接將Observable作為類型返回,并且框架將確保一旦發出所有項目,響應就會正確地編組。
@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);}}請注意,由于Observable代表0到許多項目的流,因此這次響應是一個json數組。
Spring Reactor Core Flux作為返回類型
最后,如果響應類型是Flux類型,則框架確保響應被干凈處理。 該服務遵循以下原則:
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"));}); }以及使用此類服務??的控制器:
@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);}}結論
這只是Spring Reactive項目支持的返回類型的示例,可能的返回類型遠不止于此–這里是一個更全面的示例。
我期待React式編程模型在核心Spring框架中可用。
我的github存儲庫中提供了此博客文章中提供的示例
翻譯自: https://www.javacodegeeks.com/2016/06/spring-reactive-samples.html
mfc 彈簧
總結
以上是生活随笔為你收集整理的mfc 弹簧_弹簧活性样品的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双电池手机(手机双电池和单电池)
- 下一篇: 好一点的录音软件有哪些有什么比较好的录音