aha*_*aha 5 java spring spring-security spring-boot spring-rsocket
如果不混合这两种变体,是否可以在“传统”的基于 servlet 的 Spring 应用程序中使用Spring 的 RSocket 集成,而不必牺牲 Spring 根据文档提供的功能?
如果是这样,怎么办?有什么陷阱需要注意吗?
目标是允许现有的基于 Servlet 的 Spring 应用程序通过 RSocket 与各种客户端通信。服务器端既不需要也不需要完全反应式的背压体验。必须启动一个与 servlet 容器一起运行的单独的基于 Netty 的服务器是可以接受的。
为了解决评论中提出的问题,有一些我特别关心的功能:
@PreAuthorize由应用程序的基于 servlet 的部分和基于 RSocket 的部分调用的方法?Fra*_*son -2
是的,可以在传统的基于 Servlet 的 Spring 应用程序中使用 Spring 的 RSocket 集成,而无需牺牲声明性事务支持或 Spring Security 集成。Spring 提供灵活性和模块化,允许您根据您的需求混合不同的技术和功能。您可以与现有的基于 servlet 的 Spring 应用程序一起运行单独的基于 Netty 的 RSocket 服务器。以下是实现这一目标的方法:
创建 RSocket 服务器配置:
首先创建一个 RSocket 服务器配置类。此类将定义您的 RSocket 服务器以及它如何处理传入请求。
@Configuration
public class RSocketServerConfig {
@Bean
public RSocketServer rSocketServer() {
return RSocketServer.create();
}
@Bean
public RSocketMessageHandler messageHandler() {
RSocketMessageHandler handler = new RSocketMessageHandler();
handler.setRSocketStrategies(rSocketStrategies());
return handler;
}
@Bean
public RSocketStrategies rSocketStrategies() {
return RSocketStrategies.builder().build();
}
}
Run Code Online (Sandbox Code Playgroud)
定义您的 RSocket 控制器:
创建 RSocket 控制器的方式与创建 Spring MVC 控制器的方式类似。这些控制器将处理传入的 RSocket 请求。例如:
@Controller
public class RSocketController {
@MessageMapping("your.rsocket.route")
public Mono<String> handleRSocketRequest(String request) {
// Handle the request here
return Mono.just("Response");
}
}
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中启用 RSocket:
您需要在 Spring 应用程序中启用 RSocket。为此,请将 @EnableRSocket 注释添加到您的配置类之一:
@SpringBootApplication
@EnableRSocket
public class YourServletBasedApplication {
public static void main(String[] args) {
SpringApplication.run(YourServletBasedApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
配置Spring安全:
如果您在应用程序中配置了 Spring Security,请确保您也适当地保护您的 RSocket 端点。您可以使用 Spring Security 的功能来保护您的 RSocket 控制器。
交易管理:
Spring 的事务管理应该在基于 servlet 的 Spring 应用程序中按预期工作。必要时确保您的 RSocket 控制器位于事务边界内,并相应地配置事务管理器。
需要注意的陷阱:
并发:请注意基于 servlet 的 Spring 应用程序的并发模型,并确保 RSocket 交互不会导致争用或并发问题。
资源管理:应谨慎管理基于 servlet 的应用程序和 RSocket 服务器之间的资源(例如,数据库连接、线程池),以避免资源耗尽或争用。
跨源资源共享 (CORS):如果您的 RSocket 客户端是基于 Web 的,您可能需要适当处理 CORS 设置以允许来自不同源的 RSocket 连接。
错误处理:为 RSocket 控制器实现强大的错误处理,以优雅地处理故障。
请记住,当您将 RSocket 集成到基于 servlet 的 Spring 应用程序时,反应性和背压处理的级别取决于您。您可以按原样保留基于 servlet 的代码,并通过 RSocket 提供更传统的请求响应体验(如果符合您的要求)。
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |