Frage

Warum wird der Container der Solrnet -Verbindungen statisch gehalten? Dies ist ein sehr großer Fehler, da Solrnet in unserer Bewerbung eine asynchrone Anfrage an unsere Anwendung sendet, verhält sich Solrnet ungewöhnlich. Wie kann ich dieses Problem in Solrnet vermeiden?

class P
{
    static void M(string[] a)
    { 
        Thread t = new Thread(delegate()
        {
            f1();
        });
        Thread t1 = new Thread(delegate()
        {
            f2();
        });

        t.Start();
        t1.Start();
        t.Join();
        t1.Join();
    }

    static void f1()
    {
        Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr3/"));
        ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
    }

    static void f2()
    {
        Startup.Init<Doc>(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr1/"));
        ISolrOperations<Doc> solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations<Document>>();
    }
}
War es hilfreich?

Lösung

  1. Wie im Wiki erklärt, Der integrierte Container (Startup) ist derzeit beschränkt, um auf mehrere Kerne/Instanzen mit unterschiedlichen zugeordneten Typen zuzugreifen. Wenn Sie mehr Flexibilität haben möchten, wechseln Sie entweder zu Windsor / Structuremap / Autofac, oder Helfen Sie mit, diese Funktion zu implementieren.

  2. Die Registrierungen im eingebauten Container sind möglicherweise nicht wie Sie festgestellt, aber Sie erhalten nichts, indem Sie Solrnet in verschiedenen Threads registrieren / initialisieren. Bewegen Sie einfach die gesamte Initialisierung in einen einzelnen Faden. Die tatsächliche schwere Arbeit wird ausgeführt, wenn Sie Solr.Query (...) oder Solr.add (...) erledigen ist Thread-safe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top