iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >WebFlux服务编排使用优势详解
  • 709
分享到

WebFlux服务编排使用优势详解

WebFlux服务编排优势WebFlux服务 2023-05-18 20:05:14 709人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录WEBFlux服务编排1 串行1.1 不需要 invoker1 的结果1.2 需要返回 invoker1 的结果2 并行2.1 zip 方法2.2 zipWith 方法3 前提W

WebFlux服务编排

WebFlux 服务编排是指使用 WebFlux 框架来编排多个异步服务的执行顺序和数据流动,从而构建出一个完整的、基于事件驱动的响应式应用程序。

WebFlux服务编排的优势如下:

  • 高性能:WebFlux基于响应式编程模型,可以使用少量的线程处理大量的请求,从而提高系统的并发能力和吞吐量。

  • 异步处理:WebFlux可以异步处理请求和响应,避免线程的阻塞和等待,提高系统的并发能力和性能。

  • 高可靠性:WebFlux基于事件驱动的编程模型,可以更好地处理错误和异常,从而提高系统的可靠性和稳定性。

  • 简洁清晰:WebFlux的代码简洁清晰,可以使用函数式编程风格来编写业务逻辑,提高代码的可读性和可维护性。

  • 可扩展性:WebFlux可以轻松地集成其他的响应式组件和服务,例如Reactive Streams、spring cloud、RSocket等,从而提高系统的可扩展性和灵活性。

综上所述,WebFlux服务编排可以帮助我们构建高性能、高可靠性、可扩展性强的响应式应用程序,提高系统的并发能力和性能,从而更好地满足现代应用程序的需求。

一个示例

public Mono> getOrderDetails(String orderId) {
    return Mono.fromCallable(() -> {
        // 查询订单基本信息
        return "order info";
    })
    .flatMap(orderInfo -> {
        // 查询订单商品信息
        return Mono.fromCallable(() -> {
            return "order item info";
        });
    })
    .flatMap(orderItemInfo -> {
        // 查询订单配送信息
        return Mono.fromCallable(() -> {
            return "order delivery info";
        });
    })
    .flatMap(orderDeliveryInfo -> {
        // 查询订单支付信息
        return Mono.fromCallable(() -> {
            return "order payment info";
        });
    });
}

为什么使用 fromCallable,就是上面说的,WebFlux 编排的是异步服务,而不是同步服务。

但是实际线上不要使用 fromCallable,会导致创建很多个线程,高并发场景下会导致资源竞争激烈,从而服务性能急剧下降。

1 串行

1.1 不需要 invoker1 的结果

long start = System.currentTimeMillis();
Mono<String> invoke1 = Invoker1.invoke1();
Mono<String> result = invoke1.flatMap(p -> Invoker2.invoke2())
      .map(s -> {
         return s.toString();
      });
// result: invoker2, 耗时:3592(串行)
System.out.println("result: " + result.block() + ", 耗时:" + (System.currentTimeMillis() - start));

1.2 需要返回 invoker1 的结果

long start = System.currentTimeMillis();
Mono<String> invoke1 = Invoker1.invoke1();
Mono<String> result = invoke1.flatMap(p -> {
   return Invoker2.invoke2().map(s -> {
      return p + s;
   });
});
// result: invoker1invoker2, 耗时:3554(串行)
System.out.println("result: " + result.block() + ", 耗时:" + (System.currentTimeMillis() - start));

2 并行

2.1 zip 方法

zip() 方法可以一次组装任意个Mono,适用于有多个Mono的情况

long start = System.currentTimeMillis();
Mono<String> invoke1 = Invoker1.invoke1();
Mono<String> invoker2 = Invoker2.invoke2();
Mono<String> result = Mono.zip(invoke1, invoker2)
      .map(s-> {
         String t1 = s.getT1();
         String t2 = s.getT2();
         return String.fORMat("invoke1:%s, invoke2: %s", t1, t2);
      });
// invoker1invoker2耗时:2650 (并行)
System.out.println("result: " + result.block() + ",耗时:" + (System.currentTimeMillis() - start));

2.2 zipWith 方法

zipWith() 每次组装一个Mono对象,使用于组装Mono个数比较少的情况。

long start = System.currentTimeMillis();
Mono<String> invoke1 = Invoker1.invoke1();
Mono<String> invoker2 = Invoker2.invoke2();
Mono<String> result = invoke1.zipWith(invoker2)
      .map(s -> {
         return String.format("invoke1:%s, invoke2: %s", s.getT1(), s.getT2());
      });
// invoker1invoker2耗时:2469 (并行)
System.out.println(result.block() + ",耗时:" + (System.currentTimeMillis() - start));

3 前提

这里的 invoker 就是第三方系统调用。

保证 invoker 是在独立的线程中执行,这样 invoker 不会影响业务处理。

public class Invoker1 {
   public static Mono<String> invoke1() {
      return Mono.
            fromSupplier(() -> {
               try {
                  Thread.sleep(1000);
               } catch (InterruptedException e) {
                  throw new RuntimeException(e);
               }
               return "invoker1";
            })
            .subscribeOn(Schedulers.parallel())
            .doOnError(e -> {
               System.out.println("error invoker1");
            });
   }
}
public class Invoker2 {
   public static Mono<String> invoke2() {
      return Mono.fromSupplier(() -> {
               try {
                  Thread.sleep(2000);
               } catch (InterruptedException e) {
                  throw new RuntimeException(e);
               }
               return "invoker2";
            })
            .subscribeOn(Schedulers.parallel())
            .doOnError(e -> {
               System.out.println("error invoker2");
            });
   }
}

以上就是WebFlux 服务编排使用优势详解的详细内容,更多关于WebFlux 服务编排优势的资料请关注编程网其它相关文章!

--结束END--

本文标题: WebFlux服务编排使用优势详解

本文链接: https://www.lsjlt.com/news/212403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WebFlux服务编排使用优势详解
    目录WebFlux服务编排1 串行1.1 不需要 invoker1 的结果1.2 需要返回 invoker1 的结果2 并行2.1 zip 方法2.2 zipWith 方法3 前提W...
    99+
    2023-05-18
    WebFlux 服务编排优势 WebFlux 服务
  • 详解Laravel服务容器的优势
    目录概述使用服务容器的优势例一、发送邮件例二、实现单例模式例三、旅行者去旅行总结概述 laravel服务容器就像一个高度自动化的工厂,你需要的东西,定制好模型,使用特定接口来制造。 ...
    99+
    2024-04-02
  • Docker Swarm 服务编排之命令详解
    一、简介   Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker sta...
    99+
    2024-04-02
  • Docker容器服务编排利器详解
    目录一、使用Docker Compose必要性及定义二、Docker Compose应用参考资料三、Docker Compose应用最佳实践步骤3.1 概念3.2 步骤四、Docke...
    99+
    2024-04-02
  • 阿里云虚拟服务器用处与优势详解
    阿里云虚拟服务器,简称“阿里云服务器”,是一种由阿里云提供的虚拟化计算资源,具有高效、稳定、灵活的特点。本文将详细说明阿里云虚拟服务器的用处和优势。 一、用处企业应用开发:阿里云服务器提供了丰富的开发工具和环境,企业可以在此平台上进行应用程...
    99+
    2023-11-12
    阿里 用处 详解
  • 了解服务器容器编排工具的最新趋势
    容器编排工具的最新趋势 服务网格的兴起 服务网格是一种用于管理和保护微服务的网络基础设施层。它可以提供诸如负载均衡、服务发现、故障转移和安全等功能。 演示代码: apiVersion: networking.istio.io/v1be...
    99+
    2024-02-09
    容器编排工具 Kubernetes Docker Swarm Mesos Nomad
  • golang编程开发使用sort排序示例详解
    golang sort package: https://studygolang.com/articles/3360 sort 操作的对象通常是一个 slice,需要满足三个基本的接...
    99+
    2024-04-02
  • 使用云服务器有哪些优势
    使用云服务器的优势:1. 云服务器选用大规模分布式计算体系,支持故障自动迁移,自带防火墙,保证数据的安全稳定。2. 云服务器能够按需改变服务器的配置,满足业务开展的需求。3. 云服务器支持自行选配,选择合适的线路,保证云服务器的访问速度。4...
    99+
    2024-04-02
  • 服务器使用cdn有哪些优势
    服务器使用cdn的优势有:1、可以隐藏网站的ip,保证网站不受到影响;2、能提高网站的访问速度,且价格便宜;3、提供多节点分布,能满足网站的访问需求;4、能保存网站资源,节省网站自身的资源。具体内容如下:cdn加速可以隐藏网站的ip网站的i...
    99+
    2024-04-02
  • 服务器使用cdn有什么优势
    使用CDN(内容分发网络)有许多优势,包括: 加速网站访问速度:CDN服务器会缓存网站的静态内容(如图片、视频、脚本文件等),使...
    99+
    2024-05-06
    服务器
  • 使用云服务器有什么优势
    使用云服务器的优势有:1、可扩展性高,能纵向和横向扩展内存和数据存储,实现一键安装应用程序;2、采用网络分布式集群存储,能实时备份多份数据,数据安全有保障;3、提供强大的安全支持,能有效将恶意攻击流量进行清洗过滤,确保主机的稳定可靠。具体内...
    99+
    2024-04-02
  • 浅试仿 mapstruct实现微服务编排框架详解
    目录微服务编排框架开发背景接口的方式通过注解的方式书写代码方式的选择方案选择feignMapStruct方案总结Feign @FeignClientMapStruct微服务编排框架 ...
    99+
    2024-04-02
  • 怎么使用Docker Compose进行服务编排
    这篇文章主要为大家展示了“怎么使用Docker Compose进行服务编排”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么使用Docker Compose进行服务编排”这篇文章吧。一、什么是D...
    99+
    2023-06-04
  • 使用台湾服务器有哪些优势
    使用台湾服务器的优势有:1、有国内双线路,能解决常见的网络连通问题,实现网络互联互通;2、提供优质带宽,不限流,免备案,能实现快捷顺畅的访问速度;3、有自助的管理、故障诊断、重启、修复等功能,能随时进行升迁及迁移等工作。具体内容如下:双线路...
    99+
    2024-04-02
  • 日本服务器有哪些使用优势
    日本服务器的使用优势有:1、日本距离英国或欧洲国家较近,使用日本服务器能在短时间内部署应用程序;2、日本服务器的可靠性好,整体安全系数有保证;3、用户很容易上手使用日本服务器,难度低,便利性好。具体内容如下:首先,为了更好地扩展外国客户,有...
    99+
    2024-04-02
  • 使用云服务器的优势是什么
    使用云服务器的优势包括:1. 灵活性和可扩展性:云服务器可以根据需要快速扩展或缩小规模,提供弹性的计算资源,以满足不同业务需求。2....
    99+
    2023-09-16
    云服务器
  • 使用韩国服务器有哪些优势
    使用韩国服务器的优势有:1、韩国服务器有直连线路,网络延迟低,大陆访问速度快;2、韩国服务器网络丢包率低,稳定性好,能防止恶意攻击带来的风险;3、韩国服务器提供24小时在线技术服务,能确保沟通效率和服务器的正常运行。具体内容如下:网络延迟首...
    99+
    2024-04-02
  • 使用集群服务器有哪些优势
    使用集群服务器的优势有:1、可伸缩性高,能向集群系统添加更多的服务器,满足网站的发展需求;2、可用性高,能把故障服务器上的应用程序转移到备份服务器上运行,减少服务器和应用程序的停机时间;3、可管理性高,系统管理员能从远程管理一个、甚至一组集...
    99+
    2024-04-02
  • 使用香港服务器有什么优势
    使用香港服务器有以下优势: 优越的网络连接:香港地理位置优越,连接速度快,能够提供稳定的网络连接,适用于跨国公司、跨境电商等需要跨...
    99+
    2024-04-09
    香港服务器 服务器
  • 使用韩国服务器有什么优势
    使用韩国服务器有以下几个优势: 快速的网络连接:韩国拥有先进的网络基础设施,使用韩国服务器可以获得更快的网速和更稳定的网络连接,对...
    99+
    2024-04-11
    韩国服务器 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作