让我们设想一个场景,其中有一个使用Servlet堆栈编写的旧应用程序,您决定将其迁移到Spring Webflux。我们还可以说,要迁移的第一件事是将RestTemplate迁移到WebClient。
什么是处理WebClient
返回的Mono
或Flux
的首选方式?调用block
似乎是可以的解决方案,因为应用程序使用RestTemboard
无论如何都会阻塞。订阅
应该更好一点,因为它有回调,但也许您必须等待才能继续。此外,使用订阅
,我们是否需要处理Disposable
,如果是,如何处理,因为我不确定在哪里是调用dispose
的最佳位置?
还有一个关于JDBC的问题。使用Schedulers.boundedElastic()
有多危险?根据我的理解,拥有一个单独的线程池应该会有所帮助,尤其是在使用Netty的情况下。这并不理想,但在R2DBC驱动程序达到1.0.0之前,这可能是一个临时解决方案吗?如果应用程序使用Tomcat怎么办?因为Tomcat默认有更多线程,情况会更好吗?
处理WebClient返回的Mono或Flux的首选方式是什么?
鉴于您的目标是使用Webflow,最终首选的方法是在您的反应链的整个过程中与这些发布者打交道。这意味着您最终不会直接调用订阅任何内容,因为您的控制器本身将返回一个Mono
(并且所有内容,包括WebClient
调用,都将通过链中的一系列反应操作合并到该Mono
中。)
然而,正如您所指出的,您不可能同时迁移所有内容。
如果现在只迁移网络客户端,那么只需调用block()
,以与RestController相同的方式处理它。调用subscribe()然后等待订阅完成没有任何好处,这只是一种不太明显、更冗长的阻塞方式。
一旦您将越来越多的堆栈迁移到反应式,您就可以以反应式的方式执行越来越多的操作,然后开始“移动”您的块()
调用,从而使调用链进一步向上移动(直到块处于控制器级别,然后您可以切换到返回单声道)
此外,使用subscribe,我们是否需要处理一次性
仅当您需要潜在地取消订阅服务器(并且它支持它)时这在我的经验中是很罕见的。
还有一个关于JDBC的问题。使用调度程序有多危险。boundedElastic()?
boundedElastic()被设计成一个用于阻塞IO的包装器,因此在Reactor侧使用它本身并没有什么问题。唯一的“危险”是JDBC/应用程序端是否符合您的要求:
如果您有足够长时间运行的DB查询,这还不够,那么您可以考虑使用newBoundedElastic(),并手动指定threadCap和queuedTaskCap。
如果应用程序使用Tomcat呢?由于Tomcat默认有更多的线程,情况会更好吗?
我不建议依赖它。Tomcat仍然每个请求使用一个线程(即使使用Webflux),因此存在的危险是,您最终会阻塞一个不应该阻塞的线程,并且最终没有意识到并依赖于该行为(当您切换到Netty时,这一切都会崩溃)
Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。
问题内容: 我目前正在使用Dep,并且想开始使用Go模块。 我该如何迁移? 问题答案: 从Dep迁移到Go Modules非常容易。 运行并确保您使用的是Go 1.11版或更高版本。 将代码移到GOPATH或set之外。 :这将从Gopkg.lock导入依赖项。 :这将删除不必要的导入,并添加间接导入。 (可选)删除您的供应商文件夹(或移至回收站) :进行测试构建以查看其是否有效。 :删除用于De
Redux 不是一个单一的框架,而是一系列的约定和一些让他们协同工作的函数。你的 Redux 项目的主体代码甚至不需要使用 Redux 的 API,大部分时间你其实是在编写函数。 这让到 Redux 的双向迁移都非常的容易。 我们可不想把你限制得死死的! 从 Flux 项目迁移 Reducer 抓住了 Flux Store 的本质,因此,将一个 Flux 项目逐步到 Redux 是可行的,无论你使
我正试图迁移到AndroidX,我们在我们的项目中使用这个库。然而,这目前在我们的项目中引起了一个问题: 无法解析对“module @ build type/compile class path”的依赖项:无法使用转换JetifyTransform转换文件“localytics-1.3.0.aar”以匹配属性{artifactType=processed-aar} 删除库会使此问题消失。在这个库被
如果你现在有一个正在使用其他 VCS 的代码库,但是你已经决定开始使用 Git,必须通过某种方式将你的项目迁移至 Git。 这一部分会介绍一些通用系统的导入器,然后演示如何开发你自己定制的导入器。 你将会学习如何从几个大型专业应用的 SCM 系统中导入数据,不仅因为它们是大多数想要转换的用户正在使用的系统,也因为获取针对它们的高质量工具很容易。 Subversion 如果你阅读过前面关于 git
对于 iOS 自动化,Appium 依赖苹果提供的系统框架。对于 iOS 9.2 及更低版本,苹果唯一的自动化技术被称为UIAutomation,它运行在 “Instruments” 中。从 iOS 10 开始,苹果已经完全删除了 UIAutomation 工具,因此 Appium 不可能按照以前的方式进行测试。同时,苹果推出了一款名为 XCUITest 的新型自动化技术,从 iOS 9.3 到