diff --git a/openvidu-server/src/main/java/io/openvidu/server/webhook/CDRLoggerWebhook.java b/openvidu-server/src/main/java/io/openvidu/server/webhook/CDRLoggerWebhook.java index 60353714..3aa670e5 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/webhook/CDRLoggerWebhook.java +++ b/openvidu-server/src/main/java/io/openvidu/server/webhook/CDRLoggerWebhook.java @@ -17,11 +17,6 @@ package io.openvidu.server.webhook; -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import io.openvidu.server.cdr.CDREvent; import io.openvidu.server.cdr.CDRLogger; import io.openvidu.server.config.OpenviduConfig; @@ -30,8 +25,6 @@ import io.openvidu.server.summary.SessionSummary; public class CDRLoggerWebhook implements CDRLogger { - private Logger log = LoggerFactory.getLogger(CDRLoggerWebhook.class); - private HttpWebhookSender webhookSender; public CDRLoggerWebhook(OpenviduConfig openviduConfig) { @@ -41,11 +34,7 @@ public class CDRLoggerWebhook implements CDRLogger { @Override public void log(CDREvent event) { - try { - this.webhookSender.sendHttpPostCallback(event); - } catch (IOException e) { - log.error("Error sending webhook event: {}", e.getMessage()); - } + this.webhookSender.sendHttpPostCallbackAsync(event); } @Override diff --git a/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java b/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java index 7272eaa3..c6187d8f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java +++ b/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java @@ -26,6 +26,8 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import javax.net.ssl.SSLContext; @@ -61,6 +63,8 @@ public class HttpWebhookSender { private List
customHeaders; private List events; + private ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + public HttpWebhookSender(String httpEndpoint, List
headers, List events) { this.httpEndpoint = httpEndpoint; this.events = events; @@ -102,12 +106,22 @@ public class HttpWebhookSender { .setSSLContext(sslContext).build(); } + public void sendHttpPostCallbackAsync(CDREvent event) { + executor.execute(() -> { + try { + this.sendHttpPostCallbackBlocking(event); + } catch (IOException e) { + log.error("Error sending webhook event: {}", e.getMessage()); + } + }); + } + /** * @throws IOException If: A) The HTTP connection cannot be established to the * endpoint B) The response received from the endpoint is * not 200 */ - public void sendHttpPostCallback(CDREvent event) throws IOException { + public void sendHttpPostCallbackBlocking(CDREvent event) throws IOException { if (!this.events.contains(event.getEventName())) { return;