Principios de la PAC
El principio CAP, también conocido como el teorema CAP, se refiere a la consistencia, disponibilidad y tolerancia a particiones en un sistema distribuido. El principio de la PAC establece que estos tres elementos solo pueden alcanzar dos puntos a la vez.Es imposible tomar los tres a la vez。
La esencia del principio de la PAC es AP, CP o AC, pero no existe CAP. Si no hay copia de los datos en un sistema distribuido, entonces el sistema debe cumplir la condición de consistencia fuerte, porque solo hay un dato único, no habrá inconsistencia de datos; en ese momento están presentes los dos elementos C y P, pero si el sistema tiene una condición de partición de red o tiempo de inactividad, inevitablemente hará que algunos datos sean inaccesibles y la condición de disponibilidad no pueda cumplirse, es decir, en este caso se obtiene el sistema CP, peroEl PAC no puede satisfacerse al mismo tiempo。
Revisión:
DotNetCore.CAP
CAP es un bus de eventos e implementación en un sistema distribuido (SOA, MicroService).Consistencia final(Distributed Transactions) es una biblioteca de código abierto en C# que es ligera, de alto rendimiento y fácil de usar.
Dirección de GitHub:El inicio de sesión del hipervínculo es visible.
Dotnet CAP tiene todas las funciones de Event Bus, y CAP ofrece una forma más ágil de gestionar la publicación/suscripción en EventBus.
MediatR es un marco de suscripción y publicación de mensajes en proceso que proporciona el método Send para publicar en un solo manejador y el método Publish para publicar en múltiples manejadores, que es muy cómodo de usar. Actualmente, .NET Framework 4.5, . NET Stardand1.3、. NET Stardand 2.0 y otras versiones, que pueden usarse en diversas plataformas.
ASP.NET Core utiliza el modelo intermedio MediatR
https://www.itsvse.com/thread-9272-1-1.html Vista previa de arquitectura
CAP soporta colas de mensajes como Kafka, RabbitMQ, AzureServiceBus, AmazonSQS, etc., y CAP proporciona extensiones para Sql Server, MySql, PostgreSQL y MongoDB como almacenamiento de bases de datos.
Este artículo utiliza RabbitMQ y SQL Server como colas de mensajes y almacenamiento.
Instalar RabbitMQ
Para tutoriales específicos de instalación, por favor consulta:
También se omite añadir una cuenta, por favor consulte:
Yo mismo añadí la cuenta de prueba y limité los Anfitriones Virtuales, como se muestra a continuación:
De lo contrario, el error será el siguiente:
ACCESS_REFUSED - Se denegó el inicio de sesión usando el mecanismo de autenticación PLAIN. Para más detalles, consulta el archivo de registro del corredor.
Ninguno de los puntos finales especificados era accesible
.NET Core integra CAP
Primero, crea un nuevo proyecto ASP.NET Core que sea tanto el emisor como el receptor. Usa el comando nuget para instalar el paquete así:
Al iniciar, configura el método de servicio ConfigureServices de la siguiente manera:
Puedes visitar la dirección web /cap para ver el panel de control que se muestra a continuación:
Persistencia de datos: CapCreación automática"Publicado" y "Recibido" son dos tablas de bases de datos locales
CREAR TABLA [cap]. [Publicado] ( [Id] [bigint] NO NULO, [Versión] [nvarchar] (20) NO NULO, [Nombre] [nvarchar] (200) NO NULO, [Contenido] [nvarchar] (max) NULO, [Intenta] [int] NO NULO, [Añadido] [cita2] (7) NO NULO, [Expira] [cita2] (7) NULO, [NombreDeEstado] [nvarchar] (50) NO NULO, LIMITACIÓN [PK_cap. [PUBLICADO EN CLAVES PRIMARIAS AGRUPADAS
( [Id] ASC CON (PAD_INDEX = APAGADO, STATISTICS_NORECOMPUTE = APAGADO, IGNORE_DUP_KEY = APAGADO, ALLOW_ROW_LOCKS = ENCENDIDO, ALLOW_PAGE_LOCKS = ENCENDIDO) ENCENDIDO [PRIMARIO] ) EN [PRIMARIA] TEXTIMAGE_ON [PRIMARIA] VETE CREAR TABLA [cap]. [Recibido] ( [Id] [bigint] NO NULO, [Versión] [nvarchar] (20) NO NULO, [Nombre] [nvarchar] (200) NO NULO, [Grupo] [nvarchar] (200) NULL, [Contenido] [nvarchar] (max) NULO, [Intenta] [int] NO NULO, [Añadido] [cita2] (7) NO NULO, [Expira] [cita2] (7) NULO, [NombreDeEstado] [nvarchar] (50) NO NULO, LIMITACIÓN [PK_cap. [Recibido] CLAVES PRIMARIAS AGRUPADAS
( [Id] ASC CON (PAD_INDEX = APAGADO, STATISTICS_NORECOMPUTE = APAGADO, IGNORE_DUP_KEY = APAGADO, ALLOW_ROW_LOCKS = ENCENDIDO, ALLOW_PAGE_LOCKS = ENCENDIDO) ENCENDIDO [PRIMARIO] ) EN [PRIMARIA] TEXTIMAGE_ON [PRIMARIA] VETE
El método de controlador de HomeController es el siguiente:
Cuando el usuario se registra con éxito, se envían 3 mensajes con diferentes temas, y luego el suscriptor los consume.
Cuando inicie la CAP, creará un grupo de consumidores predeterminado si varios consumidores del mismo grupo consumen el mismo mensaje temático,Solo se ejecutará a un consumidor。 Al contrarioSi los consumidores pertenecen a diferentes grupos de consumidores, todos los consumidores son ejecutados。
Crear un nuevo proyecto de consola .NET Core, como suscriptor (consumidor), o referenciar el paquete, puede ignorarse el panel de control.
Si está en el Controlador, añade [CapSubscribe("")] directamente para suscribirse a los mensajes correspondientes.
Si tu método no está en el Controlador, entonces la clase a la que te suscribes debe heredar ICapSubscribe y luego añadir la etiqueta [CapSubscribe("")]. El código es el siguiente:
Abre el cliente de suscripción e intenta acceder a http://localhost:28116/Home/UserRegister para enviar mensajes, el efecto es el siguiente:
Tanto la consola como el receptor del mando se activan, como se muestra en la figura siguiente:
Intenta lanzar una excepción manualmente en el método de mensaje receptor, el código es el siguiente:
CAP volverá a intentar el método automáticamente,El número de intentos tras el fallo es 50 por defecto, y el intervalo de intento tras fallar es de 60 segundos por defecto, como se muestra en la figura siguiente:
El framework no puede estar 100% seguro de que el mensaje se ejecute solo una vezPor lo tanto, en algunos escenarios clave, el lado del mensaje presta atención a la deduplicación empresarial en el proceso de implementación del método.
Finalmente, adjunta el código fuente:
Turistas, si queréis ver el contenido oculto de esta publicación, por favor Respuesta
|