SolrNet连接解释

本文关键字:解释 连接 SolrNet | 更新日期: 2023-09-27 18:03:26

为什么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>>();
    }
}

SolrNet连接解释

  1. 正如wiki中所解释的,内置容器(Startup)目前仅限于访问具有不同映射类型的多个内核/实例。如果你想要更多的灵活性,要么切换到Windsor/StructureMap/Autofac,要么帮助实现这一点特性。

  2. 内置容器中的注册可能不是线程安全的,但是在不同的线程中注册/初始化SolrNet没有任何好处。只需将所有初始化移到单个线程中,实际的繁重工作是在执行线程安全的solr.Query(…)或solr.Add(…)时执行的。