【问题标题】:How do I extend the Timeout in SolrConnection? (SolrConnectionException: The operation has timed out)如何延长 SolrConnection 中的超时时间? (SolrConnectionException:操作已超时)
【发布时间】:2011-10-17 21:10:25
【问题描述】:

如何扩展/修改用于 SolrConnection 对象的超时值?

我有一个长时间运行的优化操作,它似乎没有在提供的默认连接超时内完成。我正在使用的操作是ISolrOperations<?>.Optimize()。我没有看到任何直接使用 ISolrOperations 对象增加超时的选项。

我正在使用Castle Windsor IoC 容器进行实例化,以便拥有多个内核。

这是完整的堆栈跟踪:

SolrNet.Exceptions.SolrConnectionException: The operation has timed out ---> System.Net.WebException: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse()
   at HttpWebAdapters.Adapters.HttpWebRequestAdapter.GetResponse() in c:\prg\SolrNet\svn\HttpWebAdapters\Impl\HttpWebRequestAdapter.cs:line 36
   at SolrNet.Impl.SolrConnection.GetResponse(IHttpWebRequest request) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 201
   at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 113
   --- End of inner exception stack trace ---
   at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 121
   at SolrNet.Impl.SolrConnection.Post(String relativeUrl, String s) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 87
   at SolrNet.Commands.OptimizeCommand.Execute(ISolrConnection connection) in c:\prg\SolrNet\svn\SolrNet\Commands\OptimizeCommand.cs:line 76
   at SolrNet.Impl.SolrBasicServer`1.Send(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 96
   at SolrNet.Impl.SolrBasicServer`1.SendAndParseHeader(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 106
   at SolrNet.Impl.SolrBasicServer`1.Optimize(CommitOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 69
   at SolrNet.Impl.SolrServer`1.Optimize() in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:line 206
   at NationalLaborRelations.SearchAgent.SearchAgentBase.Optimize(ISolrOperations`1 s) in C:\PROJECTS\NLRB\Search\SearchAgent\SearchAgent\SearchAgentBase.cs:line 354

请注意,优化确实发生了成功,但 SolrNet 在抛出此错误之前不会等待它完成。

【问题讨论】:

  • 你使用的是内置的 IoC 容器吗?还是与另一个集成?
  • 我将 Windsor 容器用于多核。
  • 你能把这个小细节添加到问题中吗?

标签: c# solr castle-windsor solrnet


【解决方案1】:

您可以放心地忽略此超时。正如您已经发现的那样,该命令无论如何都会在 Solr 上成功运行。

或者如果您想设置连接超时,您可以在 Windsor 中使用组件模型事件进行配置:

var c = new WindsorContainer();
c.Kernel.ComponentModelCreated += model => {
    if (model.Implementation == typeof(SolrConnection))
        model.Parameters.Add("Timeout", "200000");
};
c.AddFacility("solr", new SolrNetFacility("http://localhost:8983/solr")); // or whatever

超时值以毫秒为单位。

【讨论】:

  • 这对我不起作用。你确定这是参数名称吗?该操作大约需要。 3 分钟,它在大约后超时。 100 秒使用上述值。
  • @unicron:刚刚测试,对我有用:github.com/mausch/SolrNet/commit/…
  • 确认,谢谢。 Timeout 值以毫秒为单位,我认为是秒。参考:msdn.microsoft.com/en-us/library/…
  • @unicron:对,忘记了。相应地修改答案。
  • 嗨。我想在使用 Structuremap 添加多个内核时设置超时。有什么例子吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2016-07-10
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2011-04-19
相关资源
最近更新 更多