rxjava背压怎样使用_使用MicroProfile应用隔板和背压

rxjava背压怎样使用

我录制了一段视频,介绍如何使用MicroProfile Fault Tolerance实现隔板和背压。 隔板后面的想法是将应用程序分成几个隔离功能的执行单元。 在企业Java应用程序中,这通常意味着定义多个线程池。

向客户端施加背压会导致向客户端添加有关系统当前压力的信息,以便客户端对此做出React,或者使用临时错误响应明确拒绝该请求。

在上一个视频中 ,我展示了如何通过Porcupine扩展使用纯Java EE实现该功能。

在本视频中,我将展示MicroProfile Fault Tolerance如何通过组合JAX-RS异步资源,可完成的@Asynchronous@Bulkhead @Asynchronous@Bulkhead ,以更少的配置使我们应用相同的原理。

您可以在GitHub项目中找到代码,并在MicroProfile Fault Tolerance 规范中找到更多说明。 要阅读有关如何构建弹性企业应用程序的主题的更多信息,请阅读以下文章

更新2019-03-07:

术语“ 背压”似乎与React式体系结构中的用法引起了一些混淆。 在这些视频中,我指的是如何使服务行为和响应更加可预测,以限制队列大小,并对连接到我们服务的客户端所产生的负载施加反压。 这并不意味着使用者(客户端)向生产者(服务器)发送信号以减慢数据发射的速度,而是当我们的服务器受到客户端负载的过载威胁时。

定义和约束多个资源池的全部目的是可预测我们的服务是否能够在给定时间内做出响应。 如果不是这种情况,我们希望服务立即拒绝请求,而不必花费过多的客户时间。

有关该主题的更多背景知识,您可以阅读以下文章, 了解如何在过载时施加反压 ,以及有关如何满足生产要求的文章

翻译自: https://www.javacodegeeks.com/2019/03/bulkheads-backpressure-microprofile.html

rxjava背压怎样使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RxJava 中,背压(backpressure)是一种处理数据流速不匹配的机制。当被观察者(Observable)发射数据速度快于观察者(Subscriber)处理数据的速度时,就会出现背压的情况。 为了处理背压RxJava 提供了一些操作符和策略,可以根据具体的需求选择适合的方法。下面是一些常用的方法: 1. `onBackpressureBuffer()`:将发射的数据缓存在一个无限大小的缓冲区中,直到观察者准备好处理数据。 ```java Observable.range(1, 1000) .onBackpressureBuffer() .observeOn(Schedulers.io()) .subscribe(new Subscriber<Integer>() { @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } @Override public void onNext(Integer integer) { // 处理数据 } @Override public void onError(Throwable t) { // 处理错误 } @Override public void onComplete() { // 完成操作 } }); ``` 2. `onBackpressureDrop()`:当观察者无法及时处理数据时,丢弃多余的数据。 ```java Observable.range(1, 1000) .onBackpressureDrop() .observeOn(Schedulers.io()) .subscribe(new Subscriber<Integer>() { @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } @Override public void onNext(Integer integer) { // 处理数据 } @Override public void onError(Throwable t) { // 处理错误 } @Override public void onComplete() { // 完成操作 } }); ``` 3. `onBackpressureLatest()`:只保留最新的数据,丢弃旧的数据。 ```java Observable.range(1, 1000) .onBackpressureLatest() .observeOn(Schedulers.io()) .subscribe(new Subscriber<Integer>() { @Override public void onSubscribe(Subscription s) { s.request(Long.MAX_VALUE); } @Override public void onNext(Integer integer) { // 处理数据 } @Override public void onError(Throwable t) { // 处理错误 } @Override public void onComplete() { // 完成操作 } }); ``` 这些方法可以在被观察者和观察者之间进行数据流速的调节,以避免背压问题。根据具体的业务需求,选择适合的背压处理方法即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值