小编Bri*_*zel的帖子

Kotlin协程和Spring Framework 5反应型

Kotlin协程允许通过返回Deferred值来执行非阻塞代码.这对于在使用阻塞方法(例如来自库)时制作非阻塞代码非常有用.

Spring 5允许使用MonoFlux进入框架.我看到的最大兴趣是能够序列化这两种类型的实例,并在有人调用控制器端点时将其作为响应发送回来.

Spring 5的一个重点是对Kotlin(路由器,bean声明......)有一个特定的支持,但是我找不到关于Kotlin协同程序和Spring 5反应类型之间可能的相互作用的信息.

有没有办法结合这些功能的优势?

  • 转换DeferredMono/ Flux
  • 有一个Deferred响应类型的Spring控制器方法?

如果不是,在哪种情况下,如果我们有Spring 5反应类型,协程是否有意义?

spring coroutine kotlin spring-webflux kotlinx.coroutines

6
推荐指数
1
解决办法
1860
查看次数

多个主机的多个 WebClients ( Spring webflux )

在我的应用程序中,我调用 4 个不同的 api(全部位于不同的主机上)。我希望为每个主机和其他参数(例如保持活动状态等)都有一个单独的连接池。我可以使用单个 WebClient 实现此目的还是需要 4 个不同的 WebClient 实例来实现此目的?

另外,为每个主机拥有单独的连接池是否有意义?如果没有,我可以使用单个 WebClient 来实现此目的吗?

reactive-programming spring-webflux

6
推荐指数
1
解决办法
4569
查看次数

JVM CPU峰值故障排除

我们在其中一个应用服务器上看到了一个有趣(但非常严重)的问题:在某个时间点,运行我们的Web应用程序的JVM的CPU使用率开始上升并持续上升,直到应用程序最终减速到爬行.解决此问题的唯一方法是重新启动应用程序服务器软件.

  • 应用服务器:Spring tc Server(因为服务器托管在别处,我目前还不知道确切的版本)
  • 应用程序:相对标准的Spring 3 Web应用程序(我们确实使用in-JVM EHCache)

这让我想到一个简单的问题; 我们可以做些什么来解决这个问题?

我考虑过使用VisualVM(或其他一些JVM监控工具),但他们能做的最好 - 在这种特殊情况下 - 给我一个线程转储,它仍然不会告诉我是什么占用了所有的CPU时间(除非我我错过了什么.

java jvm cpu-usage tcserver

5
推荐指数
2
解决办法
9141
查看次数

Spring 5 Web Reactive - 热发布 - 如何使用EmitterProcessor将MessageListener桥接到事件流

示例项目位于:https://github.com/codependent/spring5-playground

我想将从JMS队列接收的消息桥接到一个Reactive Controller,它将消息作为事件流发布.

我不希望重播消息,也就是说,如果消息到达且没有任何订阅者,我不希望以后在任何子载体时发送它们,所以我使用的是EmitterProcessor:

@Component
public class AlertEmitterProcessor {

    private Logger logger = LoggerFactory.getLogger(getClass());

    private EmitterProcessor<Alert> processor;

    public AlertEmitterProcessor(){
        processor = EmitterProcessor.<Alert>create();
        processor.connect();
    }

    public EmitterProcessor<Alert> getProcessor() {
        return processor;
    }

    public void onNext(Alert alert){
        logger.info("onNext [{}]", alert);
        processor.onNext(alert);
    }

    public void onComplete(){
        logger.info("onComplete");
        processor.onComplete();
    }

    public void onError(Throwable t){
        logger.error("onError", t);
        processor.onError(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的MessageListener:

@Component
public class AlertMessageListener implements MessageListener{

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired 
    private AlertEmitterProcessor alertProcessor;

    @Autowired
    private MappingJackson2HttpMessageConverter jacksonMessageConverter;

    @Override …
Run Code Online (Sandbox Code Playgroud)

spring spring-mvc reactive-programming project-reactor spring-webflux

5
推荐指数
1
解决办法
2383
查看次数

Spring Reactor:Mono.zip在空Mono上失败

我正在使用Spring Reactor 3.1.0.M3并且有一个用例,我需要从多个来源合并Mono.我发现如果其中一个Monos是一个空Mono,zip会失败而不会出错.

例:

Mono<String> m1 = Mono.just("A");
Mono<String> m2 = Mono.just("B");
Mono<String> m3 = Mono.empty();

Mono<String> combined = Mono.zip(strings -> {
    StringBuffer sb = new StringBuffer();
    for (Object string : strings) {
        sb.append((String) string);
    }
    return sb.toString();
}, m1, m2, m3);
System.out.println("Combined " + combined.block());
Run Code Online (Sandbox Code Playgroud)

添加m3时,响应中的组合子被跳过为空.当我删除m3时,它都按预期工作,并返回"AB".有没有办法通过检测空Mono来处理这个问题?另外,有没有办法让组合器方法知道对象的类型而不必抛出?

java spring project-reactor

5
推荐指数
2
解决办法
6267
查看次数

如何正确地将 Flux 包裹在 Mono 对象中

我有一个网络服务,它返回学生和注册课程的详细信息。

{
  "name": "student-name",
  "classes": [
    {
      "className": "reactor-101",
      "day": "Tuesday"
    },
    {
      "className": "reactor-102",
      "day": "Friday"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

该类的 DTO 如下:

public class Student {
        private String name;
        private Flux<StudentClass> classes;
        @Data
        @AllArgsConstructor
        @JsonInclude(JsonInclude.Include.NON_DEFAULT)
        public static class StudentClass {
            private String className;
            private String day;
        }
    }
Run Code Online (Sandbox Code Playgroud)

获取学生的主要 REST 控制器逻辑如下:

Flux<StudentClass> studentClassFlux = studentClassRepository.getStudentClass(studentName);

return Mono.just(new Student(studentName, studentClassFlux));
Run Code Online (Sandbox Code Playgroud)

问题是,在进行 REST 调用后,我得到以下输出:

{
  "name": "student-name",
  "classes": {
    "prefetch": 32,
    "scanAvailable": true
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过阻止通量请求以完成所需的输出,然后将输出转换为列表来实现所需的输出。

List<StudentClass> studentClassList = studentClassRepository.getStudentClass(studentName)..toStream().collect(Collectors.toList());
return …
Run Code Online (Sandbox Code Playgroud)

project-reactor reactive-streams spring-webflux

5
推荐指数
1
解决办法
4400
查看次数

默认情况下未启用 Spring Boot Actuator 路径?

在将我的 Spring Boot 应用程序更新到最新的构建快照时,我发现默认情况下没有启用任何执行器端点。如果我指定在 中启用application.properties它们,它们就会出现。

1) 这种行为是有意为之吗?我试图寻找一个问题来解释它,但找不到一个。有人可以将我链接到问题/文档吗?

2)有没有办法启用所有执行器端点?我经常发现自己在开发过程中使用它们,而不想在我的属性文件中维护它们的列表。

spring-boot spring-boot-actuator

5
推荐指数
1
解决办法
2957
查看次数

如何在Spring Boot 2(带有WebFlux)中为HTTP和HTTPS配置两个端口?

谁能告诉我使用Spring Boot 2和WebFlux时如何配置2个端口(用于HTTP和HTTPS)?任何提示表示赞赏!

spring-boot spring-webflux

5
推荐指数
2
解决办法
1955
查看次数

Spring Webflux WebClient:它是否支持基于摘要的身份验证?

我刚刚查看了所有 spring 5 文档,但没有发现任何与 WebClient 支持开箱即用的基于摘要的身份验证相关的内容。是否有任何解决方法可以使用 webClient 并仍然调用基于摘要的安全 API?

spring spring-security digest-authentication spring-webflux

5
推荐指数
1
解决办法
1151
查看次数

如何在 Spring Cloud Gateway 中将 HTTP 重定向到 HTTPS

如何将http呼叫重定向到httpsin spring-cloud-gateway. 我已按照此链接中的说明在我的网关项目中配置了 https 。

现在 HTTPS 网址工作正常,但此外我需要将所有http调用重定向到https. 我试过这个

但这对我不起作用,因为我没有使用默认http端口 8080,而且我的应用程序正在 Spring Security 上运行。

以下代码显示了如何重定向httphttps,但我需要相同的Netty服务器配置,因为spring-cloud-gateway仅支持 netty ..

@Configuration
public class RedirectToHttpsConfig {

    @Value("${server.port}")
    private Integer httpsPort;

    @Value("${server.http.port}")
    private Integer httpPort;

    /* ################ THIS WILL WORK FINE ################ 
       ################ IF YOU HAVE TOMCAT  ################ 
       ################ AS EMBEDDED SERVER  ################ 
   */
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new …
Run Code Online (Sandbox Code Playgroud)

spring-cloud-gateway

5
推荐指数
1
解决办法
1540
查看次数