Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por Ashley Stanton-Nurse, Brady Gaster e Tom Dykstra.
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Chame AddStackExchangeRedis adicionando a seguinte linha antes da linha que chama
builder.Build()) no arquivoProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto
ConfigurationOptions. As opções especificadas emConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Chame AddStackExchangeRedis adicionando a seguinte linha antes da linha que chama
builder.Build()) no arquivoProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto
ConfigurationOptions. As opções especificadas emConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Chame AddStackExchangeRedis adicionando a seguinte linha antes da linha que chama
builder.Build()) no arquivoProgram.cs.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto
ConfigurationOptions. As opções especificadas emConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
No método
Startup.ConfigureServices, chame AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto
ConfigurationOptions. As opções especificadas emConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
No método
Startup.ConfigureServices, chame AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto
ConfigurationOptions. As opções especificadas emConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale um dos seguintes pacotes NuGet:
-
Microsoft.AspNetCore.SignalR.StackExchangeRedis- Depende do StackExchange.Redis 2.X.X. Esse é o pacote recomendado para ASP.NET Core 2.2 ou posterior. -
Microsoft.AspNetCore.SignalR.Redis- Depende do StackExchange.Redis 1.X.X. Esse pacote não está incluído no ASP.NET Core 3.0 ou posterior.
-
No método
Startup.ConfigureServices, chame AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Ao usar Microsoft.AspNetCore.SignalR.Redis, chame AddRedis.
Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto ConfigurationOptions . As opções especificadas em
ConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
Ao usar Microsoft.AspNetCore.SignalR.Redis, chame AddRedis.
No código anterior, options.Configuration é inicializado com o que foi especificado na cadeia de conexão.
Para obter informações sobre as opções do Redis, consulte a documentação do StackExchange Redis.
Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddMessagePackProtocol()
.AddStackExchangeRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir:
Esse artigo explica aspectos específicos do SignalR da configuração de um servidor Redis a ser usado para dimensionar um aplicativo ASP.NET CoreSignalR.
Aviso
Este artigo mostra o uso de cadeias de conexão. Quando um banco de dados local é usado para desenvolvimento e teste, a autenticação do usuário do banco de dados por meio do cadeia de conexão não é necessária. Em ambientes de produção, as cadeias de conexão às vezes incluem uma senha para autenticar o acesso ao banco de dados ou operações de banco de dados. Uma ROPC (credencial de senha do proprietário do recurso) em uma cadeia de conexão é um risco de segurança que deve ser evitado em aplicativos de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou de produção, consulte ASP.NET Principais tópicos de segurança.
Configurar um backplane do Redis
Implantar um servidor Redis.
Importante
Para uso em produção, um backplane do Redis é recomendado somente quando ele é executado no mesmo data center que o aplicativo SignalR. Caso contrário, a latência de rede degrada o desempenho. Se o aplicativo SignalR estiver em execução na nuvem do Azure, recomendamos o Serviço SignalR do Azure em vez de um backplane do Redis.
Para saber mais, consulte os recursos a seguir:
No aplicativo SignalR, instale o pacote NuGet
Microsoft.AspNetCore.SignalR.Redis.No método
Startup.ConfigureServices, chameAddRedisapósAddSignalR:services.AddSignalR().AddRedis("<your_Redis_connection_string>");Configure as opções conforme necessário:
A maioria das opções pode ser definida na cadeia de conexão ou no objeto ConfigurationOptions . As opções especificadas em
ConfigurationOptionssubstituem as definidas na cadeia de conexão.O exemplo a seguir mostra como definir opções no objeto
ConfigurationOptions. Esse exemplo adiciona um prefixo de canal para que vários aplicativos possam compartilhar a mesma instância do Redis, conforme explicado na etapa a seguir.services.AddSignalR() .AddRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });No código anterior,
options.Configurationé inicializado com o que foi especificado na cadeia de conexão.Se você estiver usando um servidor Redis para vários aplicativos do SignalR, use um prefixo de canal diferente para cada aplicativo do SignalR.
Definir um prefixo de canal isola um aplicativo do SignalR de outros que usam prefixos de canal diferentes. Se você não definir prefixos diferentes, uma mensagem enviada de um aplicativo para todos os seus clientes será enviada a todos os clientes de todos os aplicativos que usam o servidor Redis como backplane.
Configure o software de balanceamento de carga do seu farm de servidores para usar sessões persistentes. Aqui estão alguns exemplos de documentação de como fazer isso:
Erros do servidor Redis
Quando um servidor Redis fica inativo, SignalR gera exceções que indicam que as mensagens não serão entregues. Algumas mensagens de exceção típicas:
- Falha ao gravar mensagem
- Falha ao invocar o método de hub "MethodName"
- Falha na conexão com o Redis
SignalR não armazena mensagens em buffer para enviá-las quando o servidor retomar as atividades. Todas as mensagens enviadas enquanto o servidor Redis está inativo são perdidas.
SignalR reconecta automaticamente quando o servidor Redis estiver disponível novamente.
Comportamento personalizado para falhas de conexão
Aqui está um exemplo que mostra como lidar com eventos de falha de conexão do Redis.
services.AddSignalR()
.AddRedis(o =>
{
o.ConnectionFactory = async writer =>
{
var config = new ConfigurationOptions
{
AbortOnConnectFail = false
};
config.EndPoints.Add(IPAddress.Loopback, 0);
config.SetDefaultPorts();
var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
connection.ConnectionFailed += (_, e) =>
{
Console.WriteLine("Connection to Redis failed.");
};
if (!connection.IsConnected)
{
Console.WriteLine("Did not connect to Redis.");
}
return connection;
};
});
Redis Cluster
O Cluster do Redis utiliza vários servidores Redis ativos simultaneamente para obter alta disponibilidade. Quando o Cluster do Redis é usado como o backplane para SignalR, as mensagens são entregues a todos os nós do cluster sem modificações de código no aplicativo.
Há uma compensação entre o número de nós no cluster e a taxa de transferência do backplane. Aumentar o número de nós aumenta a disponibilidade do cluster, mas diminui a taxa de transferência porque as mensagens devem ser transmitidas para todos os nós no cluster.
No aplicativo do SignalR, inclua todos os nós do Redis possíveis usando uma das seguintes abordagens:
- Liste os nós na cadeia de conexão delimitada com vírgulas.
- Se estiver usando o comportamento personalizado para falhas de conexão, adicione os nós a
ConfigurationOptions.Endpoints.
Próximas etapas
Para saber mais, consulte os recursos a seguir: