[英]Redis and Siglnar Occasional Hangs SocketFailure on EVAL
我們正在使用Redis:2.8.2400和SignalR 2.2.0
我們在日志中看到偶爾有掛起。
StackExchange.Redis.RedisConnectionException: SocketFailure on EVAL
at Microsoft.AspNet.SignalR.Messaging.ScaleoutStream.Send(Func`2 send, Object state)
at Microsoft.AspNet.SignalR.Infrastructure.Connection.Send(ConnectionMessage message)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Outgoing(IHubOutgoingInvokerContext context)
at Microsoft.AspNet.SignalR.Hubs.HubPipelineModule.<>c__DisplayClass1b.<BuildOutgoing>b__19(IHubOutgoingInvokerContext context)
at Microsoft.AspNet.SignalR.Hubs.SignalProxy.TryInvokeMember(InvokeMemberBinder binder, Object[] args, Object& result)
at CallSite.Target(Closure , CallSite , Object , List`1 )
at SR.BusPortal.WebApi.Hubs.SearchHub.<>c__DisplayClass8_0.<SearchInternal>b__0(List`1 x) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.WebApi\Hubs\SearchHub.cs:line 141
at SR.BusPortal.Providers.Faciliators.SearchExecutioner.PrepareResultsAsync(IEnumerable`1 connections, Boolean deliverVerifications, Func`2 callback) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.Providers\Faciliators\SearchExecutioner.cs:line 120
at SR.BusPortal.Providers.Faciliators.SearchExecutioner.<>c__DisplayClass32_0.<SearchAsync>b__0(List`1 x) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.Providers\Faciliators\SearchExecutioner.cs:line 216
StackExchange.Redis.RedisConnectionException: SocketFailure on EVAL
at Microsoft.AspNet.SignalR.Messaging.ScaleoutStream.Send(Func`2 send, Object state)
at Microsoft.AspNet.SignalR.Infrastructure.Connection.Send(ConnectionMessage message)
我可以減少它,使其在以下特定代碼行上大多失敗:
Clients.Caller.SearchResults(connectionModels);
主要是將數據返回給客戶端。
現在,我正在考慮是否可以在這種情況下捕獲特定異常並重試。 但是我不確定這是否會導致客戶端中出現重復結果?
關於錯誤本身或有關重試想法的任何建議?
我在Redis 2.8.2400上遇到了相同的問題,您可以嘗試將服務器更新到3.0.501
原因不是redis服務器。 我們使用Microsoft.AspNet.SignalR.Redis ,它使用內部1.0.316 StackExchange.Redis,但當前版本是1.0.488。
該問題僅在此StackExchange.Redis版本中發生,並且正如Redis For Windows的支持告訴我的那樣,由於客戶端連接不總是被釋放,它們過去曾遇到過類似的問題。
對於我們的緩存,我們使用ServiceSTack.Redis,即使signalR創建了錯誤,它們也能夠讀取和寫入redis。
在我們的例子中,我們只是使用粘性會話,以便我們可以刪除signalR的后平面。
另一種方法是使用另一個底板或等待信號R更新StackExchange.Redis版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.