2017-03-10 7 views
0

Unser Dienst überwacht eine Warteschlange und behält die Ereignisse in Marklogic-v8.0.6 bei, die mit dem Java-Client veröffentlicht wurden.
Der Persistenz-Code funktioniert auf diese Weise:
client.getConnection(host,port,name,pswd,auth) write content client.release
Wenn eine große Anzahl von Ereignissen gibt es sagt 2000+, nur die ersten 200-250 beharrte werden.
Dann sehen wir Ausnahmen mit der Nachricht Too many open files und die Ereignisse werden nicht danach gespeichert.
Dies liegt daran, dass es zu viele offene Verbindungen in marklogic gibt und keine Verbindungen vorhanden sind, die der Dienst nutzen kann.
Kann in marklogic ein Verbindungspool-Konzept verwendet werden?So verwalten Sie Marklogic-Verbindungen

Antwort

3

Das Clientobjekt kapselt einen Verbindungspool.

Das Erstellen eines neuen Clients für jede Anforderung ist sehr ineffizient.

Das empfohlene Verwendungsmuster besteht darin, einen Client für die Kombination aus Datenbank und Rolle zu öffnen und diesen Client weiterhin für den Zugriff auf die Datenbank mit der Rolle zu verwenden.

Der Datenbankclient und die Manager sind threadsafe nach der Konfiguration, sodass mehrere Threads denselben Datenbankclient verwenden können.

Wenn Sie feststellen, dass Sie mehr gleichzeitige Anforderungen als die Standardeinstellung benötigen, können Sie dies tun, aber der erste Schritt besteht darin, den Datenbankclient als Singleton für die Kombination aus Datenbank und Rolle zu behandeln.

der Hoffnung, dass hilft,

+0

, was passiert, wenn der Marklogic Server nach unten aus irgendeinem Grund geht, aber die Anwendung, die zu Marklogic schreibt, ist nach wie vor hoch, was auf die im Cache gespeicherten Singleton Kunden oder den Kunden geschieht, die bereits erstellt wurden? – VikramR

+1

Wenn der Client erneut authentifizieren muss, wird es. Solange die Anmeldeinformationen noch gültig sind, wird die Authentifizierung erfolgreich ausgeführt. – ehennum

Verwandte Themen