Question

Pourquoi le conteneur des connexions SolrNet maintenu statique? Ce défaut est très grand, comme quand, dans notre application, nous envoyons une requête asynchrone à notre application, SolrNet comporte de manière anormale. Comment puis-je éviter ce problème en SolrNet?

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>>();
    }
}
Était-ce utile?

La solution

  1. expliqué dans le wiki , la intégré dans le récipient (démarrage) est actuellement limitée à accès multiples noyaux / instances avec différents types mappés. Si vous voulez plus de flexibilité à ce sujet, soit passer à Windsor / StructureMap / Autofac ou aider à appliquer cette fonction .

  2. Les inscriptions dans le conteneur intégré peut ne pas être thread-safe que vous avez découvert, mais vous ne gagnez rien en vous inscrivant / SolrNet dans différents Initializing threads. Il suffit de déplacer toute l'initialisation à un seul fil, le travail lourd réel est effectuée lorsque vous solr.Query (...) ou solr.Add (...) qui thread-safe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top