我正在使用 Kafka 和 Flink 等為多個用戶構建快取資料庫查詢的資料流管道,我對何時需要實作多執行緒感到困惑。
我已經構建了一個用戶服務,其中包含使用 Vertx 的 HTTP 服務器。我有一個接受用戶輸入的端點。其中一個端點向 Kafka 服務發出網路請求,并將主題中的一些資訊回傳給用戶。我為此創建了一個“kafka 客戶端”,并且在每個用戶對端點的請求中,我創建了這個 kafka 客戶端的一個新實體來發送請求。每個用戶的請求都是完全不相關的,所以誰的請求首先被處理并不重要——不用擔心競爭條件。
如果我為每個傳入的用戶請求創建此 kafka 客戶端的新實體,則用戶 1 的請求中引發的例外不應阻止用戶 2 的請求,對嗎?(因為我已經在一個單獨的用戶執行緒中)?
在每個請求上創建一個新的客戶端實體是一種好習慣嗎?我習慣于創建單例并在 Node 專案中重用它們(不知道你是如何在 Java 中“匯入”類的)。
如果我不是在每個請求上創建新實體,而是創建一個單例客戶端并將其匯入端點以便在每個用戶的請求中重復使用,那么用戶 1 的請求中會拋出例外然后阻止用戶 2 的請求嗎?(除非我手動添加了多執行緒)或者如果每個用戶都有自己的執行緒,那么用戶 1 的執行緒中的例外不會影響用戶 2 的執行緒,即使他們使用相同的單例?
uj5u.com熱心網友回復:
在 vert.x 中,您通常會盡量避免自己實作多執行緒。您應該簡單地創建您的處理程式,vert.x 會在需要時呼叫它們。你可以在這里閱讀更多關于它在 vert.x 中的作業原理。
拋出的例外不會阻止任何請求,甚至不會阻止它們被拋出的請求。但是,如果您忘記處理它們,它們將導致請求失敗。該例外根本不會影響第二個用戶的請求,因為它們是相互隔離的。請注意,這也取決于例外的性質。如果您共享您的 kafka 客戶端并且它斷開連接,那么所有用戶將分別收到相同的錯誤。
這完全取決于您正在創建的客戶端,您應該查看他們的檔案。如果您對此主題感興趣,還可以查看連接池。您可以嘗試在類中創建客戶端,而不是為每個請求創建一個新客戶端。您還可以使用vert.x kafka 客戶端并在您的 verticle 函式中創建它
start。這樣你應該是安全的。同 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498122.html
