|
3 | 3 | import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE; |
4 | 4 | import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; |
5 | 5 |
|
| 6 | +import java.util.concurrent.Executor; |
| 7 | +import java.util.concurrent.Executors; |
6 | 8 | import java.util.concurrent.Flow; |
7 | 9 | import java.util.concurrent.atomic.AtomicLong; |
8 | 10 | import java.util.function.Function; |
@@ -66,6 +68,8 @@ public class A2AServerRoutes { |
66 | 68 | @ExtendedAgentCard |
67 | 69 | Instance<AgentCard> extendedAgentCard; |
68 | 70 |
|
| 71 | + private final Executor executor = Executors.newCachedThreadPool(); |
| 72 | + |
69 | 73 | @Route(path = "/", methods = {Route.HttpMethod.POST}, consumes = {APPLICATION_JSON}, type = Route.HandlerType.BLOCKING) |
70 | 74 | public void invokeJSONRPCHandler(@Body String body, RoutingContext rc) { |
71 | 75 | boolean streaming = false; |
@@ -93,7 +97,12 @@ public void invokeJSONRPCHandler(@Body String body, RoutingContext rc) { |
93 | 97 | .putHeader(CONTENT_TYPE, APPLICATION_JSON) |
94 | 98 | .end(Json.encodeToBuffer(error)); |
95 | 99 | } else if (streaming) { |
96 | | - MultiSseSupport.subscribeObject(streamingResponse.map(i -> (Object)i), rc); |
| 100 | + final Multi<? extends JSONRPCResponse<?>> finalStreamingResponse = streamingResponse; |
| 101 | + executor.execute(() -> { |
| 102 | + MultiSseSupport.subscribeObject( |
| 103 | + finalStreamingResponse.map(i -> (Object)i), rc); |
| 104 | + }); |
| 105 | + |
97 | 106 | } else { |
98 | 107 | rc.response() |
99 | 108 | .setStatusCode(200) |
|
0 commit comments