SolrNet连接的说明

Ahs*_*bal 5 c# solrnet

为什么SolrNet连接的容器保持静态?这是一个非常大的错误,因为在我们的应用程序中,我们向应用程序发送异步请求时,SolrNet表现异常.我如何在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>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mau*_*fer 5

  1. wiki中所述,内置容器(Startup)目前仅限于访问具有不同映射类型的多个核心/实例.如果您想要更灵活,可以切换到Windsor/StructureMap/Autofac,或者帮助实现此功能.

  2. 正如您所发现的那样,内置容器中的注册可能不是线程安全的,但是通过在不同的线程中注册/初始化SolrNet,您无法获得任何好处.只需将所有初始化到单个线程,实际繁重的工作中进行,当你做solr.Query(...)或solr.Add(...),它线程安全的.