【问题标题】:Explanation of SolrNet connectionSolrNet 连接说明
【发布时间】:2011-07-26 13:20:58
【问题描述】:

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

【问题讨论】:

  • 您看到的错误或异常行为是什么?
  • 在我的应用程序中,我有多个 solr 索引,比如说 5,我有 5 个单独的类,代表一个 solr 文档。现在异常行为是在一种特殊情况下,我向应用程序发送异步请求,其中错误键已存在于容器中。
  • 你能发布一个失败的测试,或者至少是完整的堆栈跟踪吗?
  • 在 SolrNet.Utils.Container.Register(String key, Type serviceType, Converter2 factory) in D:\solrNet\SolrNet\Utils\Container.cs:line 83 at SolrNet.Utils.Container.Register[T](String key, Converter2 factory) 在 D:\solrNet\SolrNet\Utils\Container.cs: 在 SolrNet.Startup 的第 71 行D:\solrNet\SolrNet\Startup.cs 中的 .Init[T](IsolrConnection connection):D:\solrNet\EntryPoint\Program.cs 中 EntryPoint.Program.funa() 的第 98 行:EntryPoint.Program 的第 51 行。
    b__1() 在 D:\solrNet\EntryPoint\Program.cs:System.Threading.ExecutionContext.Run 的第 31 行
  • 你能发布你的 Program.cs 或者至少是有问题的部分吗?

标签: c# solrnet


【解决方案1】:
  1. 作为explained in the wiki,内置容器(启动)目前仅限于访问具有不同映射类型的多个内核/实例。如果您想要更多的灵活性,请切换到 Windsor / StructureMap / Autofac 或 help implement this feature。

  2. 内置容器中的注册可能不像您所发现的那样是线程安全的,但是通过在不同线程中注册/初始化 SolrNet,您一无所获。只需将所有初始化移至单个线程,当您执行 solr.Query(...) 或 solr.Add(...) 时执行实际繁重的工作,这 是线程安全的。 p>

【讨论】:

  • solrnet Windsor / StructureMap / Autofac 的哪个版本可用
  • Windsor 和 StructureMap 在 0.3.1 中可用。 0.4.0a1 中的 Autofac
  • 另一件事天气“Windsor / StructureMap”是线程安全的?
  • @Ahsan Iqbal:Windsor 在注册和解析方面都是线程安全的。所有容器的分辨率都是线程安全的。
  • 非常感谢您的帮助还有一件事是可以在 SolrNetFacility 中实现一个功能,以便它可以使用 POST 方法而不是 GET,因为我经常需要向 solr 发送大量参数超出网址限制。
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 2012-02-29
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多