JAX-RS实现SSE在Wildfly中报错:无法设置请求为异步模式
JAX-RS实现SSE在Wildfly中报错:Failed to set servlet request into asynchronous mode, server sent events may not work
我尝试使用JAX-RS实现SSE,代码如下:
import java.util.List; import java.util.Random; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.IntStream; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.sse.OutboundSseEvent; import javax.ws.rs.sse.Sse; import javax.ws.rs.sse.SseEventSink; @Path("events") public class EventsHandler { Executor executorService = Executors.newSingleThreadExecutor(); @GET @Produces(MediaType.SERVER_SENT_EVENTS) public void sendEvents(@Context SseEventSink sseEventSink, @Context Sse sse) { Random rnd = new Random(); IntStream rndStream = IntStream.generate(() -> rnd.nextInt(90)); List<Integer> lottery = rndStream.limit(5).boxed().collect(Collectors.toList()); executorService.execute(() -> { lottery.forEach(value -> { try { TimeUnit.SECONDS.sleep(5); System.out.println("Sending the following value: " + value); final OutboundSseEvent outboundSseEvent = sse.newEventBuilder().name("lottery") .data(Integer.class, value).build(); sseEventSink.send(outboundSseEvent); } catch (Exception ex) { ex.printStackTrace(); } }); sseEventSink.close(); }); } }
但在Wildfly服务器上运行时,始终抛出错误信息:Failed to set servlet request into asynchronous mode, server sent events may not work,且无更多细节。我曾尝试将servlet配置中的asyncSupport设为true,但没有效果。
2023年5月15日更新
问题根源在于web.xml中使用的其他过滤器,所有涉及该servlet的过滤器都必须启用异步支持。
内容的提问来源于stack exchange,提问作者strasso
相关产品推荐
相关产品推荐

