Pregunta

¿Por qué el contenedor de las conexiones Solrnet se mantiene estática? Esta es una falla muy grande, ya que cuando, en nuestra aplicación, enviamos una solicitud asíncrona a nuestra aplicación, Solrnet se comporta de manera anormal. ¿Cómo puedo evitar este problema 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>>();
    }
}
¿Fue útil?

Solución

  1. Como explicado en la wiki, el contenedor incorporado (inicio) está actualmente limitado para acceder a múltiples núcleos/instancias con diferentes tipos mapeados. Si desea más flexibilidad al respecto, cambie a Windsor / StructureMap / Autofac, o Ayuda a implementar esta función.

  2. Es posible que los registros en el contenedor incorporado no sean seguros de subprocesos como ha descubierto, pero no gana nada al registrar / inicializar Solrnet en diferentes subprocesos. Simplemente mueva toda la inicialización a un solo hilo, el trabajo pesado real se realiza cuando haces Solr.Query (...) o Solr.Add (...) que es a salvo de amenazas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top