Del curso: Azure: Microservicios avanzados para desarrollo .NET

Creando el almacenamiento de eventos en Azure Cosmos DB - Tutorial de Azure

Del curso: Azure: Microservicios avanzados para desarrollo .NET

Creando el almacenamiento de eventos en Azure Cosmos DB

En este video vamos a aprovisionar la cuenta de Azure Cosmos DB que nos va a servir como almacenamiento de eventos. Posteriormente vamos a crear una nueva biblioteca de clases donde vamos a implementar una clase llamada Patient Aggregate Store. Bien, entonces, en esta página de creación de cuenta de Azure Cosmos DB, asegúrate de seleccionar el API de Core SQL y en la siguiente página asegúrate de seleccionar como nombre Wisdom Pet Medicine, o algo similar, y el Capacity Mode de tipo Serverless. Esto ya lo hice con anticipación para acelerar este proceso. Esto ya lo tengo por acá. Una vez que hayas creado tu cuenta de Azure Cosmos DB, asegúrate de crear una nueva base de datos llamada Wisdom Pet Medicine y un nuevo «container» llamado Patients. Específicamente, Patients, cuando lo generes, ese container, asegúrate de tener el partition key establecido a /aggregateId, así como está escrito aquí en pantalla, en minúsculas, y la «i» de ID en mayúsculas. Por último, después de que hayas creado tu base de datos y el contenedor, ve a esta opción de Keys y aquí copia la cadena de conexión ya que la vamos a utilizar en appsettings.json. Bien, vámonos a Visual Studio. Aquí en el folder de Hospital, vamos a crear un nuevo proyecto de tipo Class Library y le vamos a poner «WisdomPetMedicine. Hospital.Infrastructure», este va a ser el nombre de esta biblioteca de clases. Y lo primero que tenemos que hacer es agregar la referencia a un paquete de NuGet llamado Microsoft Azure Cosmos. Vamos a buscarlo aquí, «Microsoft.Azure.Cosmos». Este que está aquí. Al momento de estar grabando este video, la última versión es la 3.21.0. Bien, vamos a instalar este paquete de NuGet, vamos a cerrar este panel, y lo que vamos a hacer es renombrar esta clase que nos deja la plantilla, ya que le vamos a poner de nombre Patient Aggregate Store. «PatientAggregateStore». Además, vamos a agregar la referencia al proyecto Hospital.domain, ya que ahí está declarada la interfaz «IPatientAggregateStore». Vamos a implementar esta interfaz. Y antes, ya que seleccioné la plantilla de Class Library, pero esa está basada en el .NET estándar, asegúrate de cambiar esto a .NET 5.0 o la versión de .NET que estés utilizando. Bien, ahora sí, vamos a implementar esta interfaz. Y la implementación completa ya la tengo por acá. Esto está en el código relacionado con este video. Simplemente lo voy a pegar para acelerar este proceso. Vamos a cerrar estos paneles para poder observar mejor el código. Aquí IConfiguration necesita el paquete de NuGet de Microsoft.Extensions. Configurations.Abstractions que vamos a instalar. Bien, con esto es suficiente para resolver el error que teníamos. Ahora sí, vamos a explicar el código. Lo que hace esto es inyectar el IConfiguration, ya que vamos a leer esta sección de Cosmos DB y específicamente sus subelementos ConnectionString, databaseID y containerID. Esos valores los vamos a poner en estas variables que tenemos en pantalla para, posteriormente, poder crear la instancia de un objeto de tipo CosmosClient, que podemos ver por acá. Y usando ese mismo objeto CosmosClient, estamos obteniendo el contenedor, que en este caso, pues, es Patients. Pero aquí lo estamos pasando como parámetro para que esto quede configurable. Bien, eso es todo lo que tenemos que hacer con esta clase que está aquí en pantalla y ahora, por último, tendríamos que irnos a Hospital.Api, aquí en appsettings.json, justamente para poder agregar esa configuración después del elemento ServiceBus, la vamos a poner por acá. De igual manera, este código lo puedes tomar del repositorio relacionado con este video. Aquí nota que tenemos el elemento Cosmos DB y un subelemento llamado ConnectionString que tiene este valor. Igualmente, databaseID y containerID, por eso, esta estructura indica cómo debemos leerlo acá, a través de esta interfaz IConfiguration. Bien, con esto es suficiente para poder continuar con nuestra implementación.

Contenido