Repository: quarkusio/quarkus
Issue: Quarkus HTTP response gets messed up under load

**Describe the bug**
The issue title might be a bit misleading, still trying to understand.

Last week, we had an application starting to return broken HTTP response (more on this below) under load on OpenShift (important as the limited concurrency may be the issue).

```
while true; do curl -XGET -i -Hx-rh-identity:`cat rhid` localhost:8080/api/notifications/v1.0/notifications/defaults; done;
```

The application is using Mutiny, Reactor, and R2DBC. It does an R2DBC query and the result is produced in a reactor epoll thread (Thread[reactor-tcp-epoll-7,5,executor]). 

The HTTP endpoint is returning a `Uni<List<Endpoint>>`. 
Under load, it sometimes returns:

```
HTTP/1.1 200 OK
Content-Length: 0 
```

and sometimes:

```
HTTP/1.1 200 OK
Content-Length: 706
Content-Type: application/json
[{...}][{...}]
```

So 2 concatenated responses.

We have verified that the item provided by the Uni is correct, so the issue is around the HTTP response write and flush.

As the endpoint is async, the request is suspended and resume. But it seems that the resuming may lead to a wrong (Vert.x) context.

**To Reproduce**

Unfortunately, I was not able to reproduce it locally. 
It only happens in OpenShift. I believe it's because of the limited parallelism (and so limited event loop) which means they may be reused by multiple requests. 


Changed files:
extensions/resteasy/runtime/src/main/java/io/quarkus/resteasy/runtime/standalone/VertxRequestHandler.java

diff --git a/extensions/resteasy/runtime/src/main/java/io/quarkus/resteasy/runtime/standalone/VertxRequestHandler.java b/extensions/resteasy/runtime/src/main/java/io/quarkus/resteasy/runtime/standalone/VertxRequestHandler.java
index d74ee5fc520..38502bac3d2 100644
--- a/extensions/resteasy/runtime/src/main/java/io/quarkus/resteasy/runtime/standalone/VertxRequestHandler.java
+++ b/extensions/resteasy/runtime/src/main/java/io/quarkus/resteasy/runtime/standalone/VertxRequestHandler.java
@@ -3,6 +3,8 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.Executor;
 
 import javax.enterprise.inject.Instance;
@@ -126,9 +128,10 @@ private void dispatch(RoutingContext routingContext, InputStream is, VertxOutput
                     hostSupplier,
                     dispatcher.getDispatcher(), vertxResponse, requestContext, executor);
             vertxRequest.setInputStream(is);
-            try {
-                ResteasyContext.pushContext(SecurityContext.class, new QuarkusResteasySecurityContext(request, routingContext));
-                ResteasyContext.pushContext(RoutingContext.class, routingContext);
+            Map<Class<?>, Object> map = new HashMap<>();
+            map.put(SecurityContext.class, new QuarkusResteasySecurityContext(request, routingContext));
+            map.put(RoutingContext.class, routingContext);
+            try (ResteasyContext.CloseableContext restCtx = ResteasyContext.addCloseableContextDataLevel(map)) {
                 ContextUtil.pushContext(routingContext);
                 dispatcher.service(ctx, request, response, vertxRequest, vertxResponse, true);
             } catch (Failure e1) {