Redis pubsub 채널을 사용하여 작업자 프로세스 풀에서 ASP.NET 응용 프로그램으로 메시지를 보냅니다. 메시지가 수신되면, 어플리케이션은 SignalR로 클라이언트의 브라우저로 메시지를 전달합니다.Booksleeve로 열린 Redis PubSub 구독 유지
Redis에 열린 연결을 유지하기 위해 this solution을 찾았지만 연결을 다시 만들 때 구독을 고려하지 않습니다.
나는 현재 내에서 Global.asax 파일에 레디 스의 pubsub 메시지를 처리 해요 :
public class Application : HttpApplication
{
protected void Application_Start()
{
var gateway = Resolve<RedisConnectionGateway>();
var connection = gateway.GetConnection();
var channel = connection.GetOpenSubscriberChannel();
channel.PatternSubscribe("workers:job-done:*", OnExecutionCompleted);
}
/// <summary>
/// Handle messages received from workers through Redis.</summary>
private static void OnExecutionCompleted(string key, byte[] message)
{
/* forwarded the response to the client that requested it */
}
}
현재 RedisConnection가 어떤 이유로 폐쇄 될 때 문제가 발생합니다. 가장 간단한 해결책은 연결이 재설정되었을 때 RedisConnectionGateway
클래스에서 이벤트를 시작하고 새로운 RedisSubscriberChannel
을 사용하여 다시 구독하는 것입니다. 그러나 연결이 재설정되는 동안 채널에 게시 된 모든 메시지는 손실됩니다.
이 상황을 처리하는 데 권장되는 방법의 예가 있습니까?
내 솔루션은 이미 열려있는 경우 Redis 연결을 반환하거나 그렇지 않으면 하나를 엽니 다. "재래식 사용"에서 연결은 열린 상태로 유지되고 PubSub 스키마에서 연결이 끊어지지는 않을 것이라고 생각합니다. 어떤 이유로 연결이 닫히는 드문 경우에 새 연결이 생기고 연결을 재설정하는 동안 채널에 게시 된 메시지가 손실됩니다. 그러나 그것은 매우 짧은 시간 동안이며, 정기적으로 일어나는 것으로 생각하지 않습니다. 어쨌든, BookSleeve의 저자가 이것을 강조하겠습니다 (CC @ marcgravell). –
@OferZelig 감사합니다. 그러나'@ someone'은 내가 어떻게 든 포스트에 이미 관련되어 있지 않으면 작동하지 않습니다; p –
@MarcGravell 나는 그것을 몰랐습니다. 어쨌든 : 1) 어떻게 다른 SE 사용자와 대화하여 뭔가에 관심을 갖게 할 수 있습니까? 내 말은 - SE 사이트 내에서 프로필을 확인하지 않고 자신의 블로그 등으로 이동합니다. 2) SE에서 경고 및 경고를 식별하는 기능을 구현할 수 있습니다 ( xxx 패턴, 여기서 xxx는 알려진 SE 사용자 이름 임). 감사! –