Princípios da PAC
O princípio da CAP, também conhecido como teorema da CAP, refere-se à consistência, disponibilidade e tolerância de partição em um sistema distribuído. O princípio da PAC afirma que esses três elementos só podem alcançar dois pontos ao mesmo tempo.É impossível fazer os três ao mesmo tempo。
A essência do princípio da CAP é ou AP, CP ou AC, mas não existe CAP. Se não houver cópia dos dados em um sistema distribuído, então o sistema deve atender à condição de forte consistência, pois há apenas um dado único, não haverá inconsistência de dados; neste momento, os dois elementos C e P estão presentes, mas se o sistema tiver uma condição de partição de rede ou tempo de inatividade, isso inevitavelmente levará a que alguns dados fiquem inacessíveis, e a condição de disponibilidade não possa ser cumprida, ou seja, o sistema CP é obtido nesse caso, masO PAC não pode ser satisfeito ao mesmo tempo。
Revisar:
DotNetCore.CAP
CAP é um barramento de eventos e implementação em um sistema distribuído (SOA, MicroService).Consistência Final(Transações Distribuídas) é uma biblioteca C# de código aberto que é leve, de alto desempenho e fácil de usar.
Endereço do GitHub:O login do hiperlink está visível.
O Dotnet CAP possui todos os recursos do Event Bus, e o CAP oferece uma forma mais simplificada de gerenciar publicações/assinaturas no EventBus.
MediatR é um framework de assinatura e publicação de mensagens em processo que fornece o método Send para publicar em um único handler e o método Publish para publicar em múltiplos handlers, que é muito conveniente de usar. Atualmente, .NET Framework 4.5, . NET Stardand1.3、. NET Stardand 2.0 e outras versões, que podem ser usadas em várias plataformas.
ASP.NET Core utiliza o modelo intermediário MediatR
https://www.itsvse.com/thread-9272-1-1.html Prévia de arquitetura
O CAP suporta filas de mensagens como Kafka, RabbitMQ, AzureServiceBus, AmazonSQS, etc., e o CAP fornece extensões para Sql Server, MySql, PostgreSQL e MongoDB como armazenamento de banco de dados.
Este artigo utiliza RabbitMQ e SQL Server como filas de mensagens e armazenamento.
Instale o RabbitMQ
Para tutoriais específicos de instalação, consulte a:
Adicionar uma conta também é omitido, por favor, consulte a:
Eu mesmo adicionei a conta de teste e limitei os Hosts Virtuais, como mostrado abaixo:
Caso contrário, o erro será o seguinte:
ACCESS_REFUSED - O login foi recusado usando o mecanismo de autenticação PLAIN. Para mais detalhes, veja o arquivo de registro do corretor.
Nenhum dos endpoints especificados era acessível
.NET Core integra CAP
Primeiro, crie um novo projeto ASP.NET Core que seja tanto o remetente quanto o receptor. Use o comando nuget para instalar o pacote assim:
Na inicialização, configure o método de serviço ConfigureServices da seguinte forma:
Você pode acessar o site/endereço do cap para visualizar o painel conforme mostrado abaixo:
Persistência de dados: O limite de responsabilidadeCriação automática"Publicado" e "Recebido" são duas tabelas locais de banco de dados
CRIAR TABELA [cap]. [Publicado] ( [ID] [bigint] NÃO NULO, [Versão] [nvarchar] (20) NÃO NULO, [Nome] [nvarchar] (200) NÃO NULO, [Conteúdo] [nvarchar] (max) NULL, [Tenta tentar] [int] NÃO NULO, [Adicionado] [datetime2] (7) NÃO NULO, [Expira] [datetime2] (7) NULO, [StatusNome] [nvarchar] (50) NÃO NULO, RESTRIÇÃO [PK_cap. [CHAVES PRIMÁRIAS AGRUPADAS
( [Id] ASC )COM (PAD_INDEX = DESLIGADO, STATISTICS_NORECOMPUTE = DESLIGADO, IGNORE_DUP_KEY = DESLIGADO, ALLOW_ROW_LOCKS = LIGADO, ALLOW_PAGE_LOCKS = LIGADO) LIGADO [PRIMÁRIO] ) EM [PRIMÁRIO] TEXTIMAGE_ON [PRIMÁRIO] VAI CRIAR TABELA [cap]. [Recebido] ( [ID] [bigint] NÃO NULO, [Versão] [nvarchar] (20) NÃO NULO, [Nome] [nvarchar] (200) NÃO NULO, [Grupo] [nvarchar] (200) NULL, [Conteúdo] [nvarchar] (max) NULL, [Tenta tentar] [int] NÃO NULO, [Adicionado] [datetime2] (7) NÃO NULO, [Expira] [datetime2] (7) NULO, [StatusNome] [nvarchar] (50) NÃO NULO, RESTRIÇÃO [PK_cap. [Recebido] CLUSTER DE CHAVE PRIMÁRIA
( [Id] ASC )COM (PAD_INDEX = DESLIGADO, STATISTICS_NORECOMPUTE = DESLIGADO, IGNORE_DUP_KEY = DESLIGADO, ALLOW_ROW_LOCKS = LIGADO, ALLOW_PAGE_LOCKS = LIGADO) LIGADO [PRIMÁRIO] ) EM [PRIMÁRIO] TEXTIMAGE_ON [PRIMÁRIO] VAI
O método do controlador HomeController é o seguinte:
Quando o usuário se registra com sucesso, 3 mensagens com diferentes tópicos serão enviadas, e então o assinante as consumirá.
Quando o CAP começar, ele criará um grupo padrão de consumidores, se múltiplos consumidores do mesmo grupo consumirem a mesma mensagem de tópico,Apenas um consumidor será executado。 Pelo contrário,Se os consumidores estiverem em grupos diferentes, todos os consumidores são executados。
Criar um novo projeto de console .NET Core, como assinante (consumidor), ou referenciar o pacote, o painel pode ser ignorado.
Se estiver no Controlador, adicione [CapSubscribe("")] diretamente para assinar as mensagens relevantes.
Se seu método não estiver no Controlador, então a classe à qual você assina precisa herdar o ICapSubscribe e então adicionar a tag [CapSubscribe("")]. O código é o seguinte:
Abra o cliente de assinatura e tente acessar http://localhost:28116/Home/UserRegister para enviar mensagens, o efeito é o seguinte:
Tanto o console quanto o receptor do controle são acionados, como mostrado na figura abaixo:
Tente lançar uma exceção manualmente no método de mensagem receptora, o código é o seguinte:
O CAP tentará automaticamente o método novamente,O número de tentativas após a falha é 50 por padrão, e o intervalo de tentativa após a falha é 60 segundos por padrão, como mostrado na figura abaixo:
O framework não pode ter 100% de certeza de que a mensagem é executada apenas uma vezPortanto, em alguns cenários-chave, o lado da mensagem presta atenção à deduplicação empresarial no processo de implementação do método.
Por fim, anexe o código-fonte:
Turistas, se quiserem ver o conteúdo oculto deste post, por favor Resposta
|