Explication de la connexion SolrNet
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>>();
}
}
La solution
-
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 .
-
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.