Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 57382|Resposta: 3

[ASP.NET] ASP.NET Core (cinco) é baseado em transações distribuídas CAP

[Copiar link]
Postado em 17-03-2021 18:12:50 | | | |
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

2% &&3% de transações distribuídas
https://www.itsvse.com/thread-9591-1-1.html

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:

ASP.NET Validação unificada do modelo ModelState do filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Criar instâncias dinamicamente usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar a aplicação por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) usa cache Redis
https://www.itsvse.com/thread-9393-1-1.html


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:

【Combate Prático】Tutorial de instalação do RabbitMQ no Windows
https://www.itsvse.com/thread-4630-1-1.html

【Practice】RabbitMQ instala o plugin de gerenciamento web
https://www.itsvse.com/thread-4631-1-1.html
Adicionar uma conta também é omitido, por favor, consulte a:

【Practice】rabbitMQ console para adicionar informações da conta
https://www.itsvse.com/thread-4655-1-1.html
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.

Problemas de idempotência de interface
https://www.itsvse.com/thread-6010-1-1.html

Por fim, anexe o código-fonte:

Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta






Anterior:Conversão online em CSV da sintaxe Markdown
Próximo:HttpClient POST diretamente para enviar solicitações de compressão por byte byte (gzip)
Postado em 18-03-2021 18:11:20 |
Venha dar uma olhada, obrigado por compartilhar
Postado em 2021-9-22 20:42:18 |
Aprenda a aprender...
Postado em 31-12-2021 15:08:21 |
Aprendizado
Muito bem, muito bom
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com