Duong Tran

Duong Tran

1658887312

Xây dựng, Triển khai và Kiểm tra Microservices với .NET, C# và Docker

Tìm hiểu khái niệm về Kiến trúc Microservices. Tìm hiểu cách xây dựng, triển khai và kiểm tra Kiến trúc Microservices trong .NET và C # bằng cách sử dụng vùng chứa Docker.

Microservices

Thuật ngữ microservices mô tả một phong cách phát triển phần mềm đã phát triển từ các xu hướng hiện đại để thiết lập các phương pháp thực hành nhằm tăng tốc độ và hiệu quả của việc phát triển và quản lý các giải pháp phần mềm trên quy mô lớn. Microservices thiên về việc áp dụng một số nguyên tắc và mô hình kiến ​​trúc nhất định làm kiến ​​trúc. Mỗi microservice sống độc lập, nhưng mặt khác, tất cả cũng dựa vào nhau. Tất cả các microservices trong một dự án đều được triển khai trong quá trình sản xuất theo tốc độ riêng của chúng, tại chỗ trên đám mây, độc lập, sống song song với nhau.

Trong bài viết này, chúng ta sẽ tìm hiểu khái niệm về Microservices, kiến ​​trúc của chúng và cách tạo microservices trong .NET và C #. Bạn cũng sẽ tìm hiểu các bước để xây dựng, triển khai và kiểm tra các microservices trong .NET bằng cách sử dụng bộ chứa docker.

Kiến trúc Microservices

Hình ảnh sau đây từ Microsoft Docs cho thấy kiểu kiến ​​trúc microservices.

 

Có nhiều thành phần khác nhau trong kiến ​​trúc microservices ngoài bản thân microservices.

Quản lý . Duy trì các nút cho dịch vụ.

Nhà cung cấp danh tính . Quản lý thông tin nhận dạng và cung cấp dịch vụ xác thực trong mạng phân tán.

Khám phá dịch vụ . Theo dõi các dịch vụ và địa chỉ dịch vụ và điểm cuối.

Cổng API . Đóng vai trò là điểm vào của khách hàng. Một đầu mối liên hệ từ khách hàng sẽ trả lại phản hồi từ các dịch vụ nhỏ cơ bản và đôi khi là phản hồi tổng hợp từ nhiều dịch vụ vi mô cơ bản.

CDN . Mạng phân phối nội dung để cung cấp tài nguyên tĩnh cho các trang và nội dung web trong mạng phân tán

Nội dung tĩnh Các tài nguyên tĩnh như các trang và nội dung web

Các dịch vụ vi mô được triển khai độc lập với cơ sở dữ liệu của riêng chúng cho mỗi dịch vụ, do đó các dịch vụ vi mô cơ bản trông như thể hiện trong hình sau.

 

Kiến trúc nguyên khối so với Microservices

Các ứng dụng nguyên khối không chỉ là một gói hoàn chỉnh có tất cả các thành phần và dịch vụ cần thiết liên quan được gói gọn trong một gói.

Sau đây là biểu diễn sơ đồ của kiến ​​trúc nguyên khối được đóng gói hoàn toàn hoặc dựa trên dịch vụ.

 

Microservice là một cách tiếp cận để tạo ra các dịch vụ nhỏ, mỗi dịch vụ chạy trong không gian riêng của chúng và có thể giao tiếp qua tin nhắn. Đây là các dịch vụ độc lập gọi trực tiếp cơ sở dữ liệu của riêng chúng.

Sau đây là biểu diễn sơ đồ của kiến ​​trúc microservices.

 

Trong kiến ​​trúc nguyên khối, cơ sở dữ liệu vẫn giữ nguyên cho tất cả các chức năng ngay cả khi tuân theo cách tiếp cận của kiến ​​trúc hướng dịch vụ, trong khi trong microservices, mỗi dịch vụ sẽ có cơ sở dữ liệu riêng.

Docker Containers và cài đặt Docker

Các vùng chứa như Dockers và những vùng khác chia nhỏ tài nguyên của hệ điều hành, chẳng hạn như ngăn xếp mạng, không gian tên quy trình, phân cấp hệ thống tệp và ngăn xếp lưu trữ. Dockers giống như ảo hóa hệ điều hành hơn. Tìm hiểu thêm về dockers tại đây . Mở URL này và nhấp vào Tải xuống từ trung tâm Docker. Sau khi tải xuống, hãy đăng nhập vào Docker và làm theo hướng dẫn để cài đặt Docker cho Windows.

Microservice sử dụng ASP.NET Core

Phần này sẽ trình bày cách tạo một dịch vụ sản phẩm nhỏ bằng cách sử dụng ASP.NET Core từng bước với sự trợ giúp của hình ảnh. Dịch vụ sẽ được xây dựng bằng ASP.NET Core 2.1 và Visual Studio 2017. Asp.NET Core được tích hợp với VS 2017. Dịch vụ này sẽ có DBcontext và cơ sở dữ liệu riêng với kho lưu trữ riêng biệt để dịch vụ có thể được triển khai độc lập.

 

Tạo giải pháp ứng dụng cốt lõi ASP.NET

  1. Mở Visual Studio và thêm một dự án mới.

  2. Chọn ứng dụng là ASP.NET Core Web Application và đặt cho nó một cái tên có ý nghĩa.

  3. Tiếp theo, chọn API làm loại dự án và đảm bảo rằng tùy chọn “Bật hỗ trợ Docker” được chọn với loại hệ điều hành là Linux.

  4. Giải pháp sẽ như hình dưới đây.

Thêm mô hình

  1. Thêm một thư mục mới có tên "Model" vào dự án.

  2. Trong thư mục Mô hình, thêm một lớp có tên Sản phẩm.

  3. Thêm một số thuộc tính như Id, Tên, Mô tả, Giá vào loại sản phẩm. Sản phẩm cũng phải thuộc loại nào đó và đối với điều đó, mô hình danh mục được xác định và thuộc tính CategoryId được thêm vào mô hình sản phẩm.

  4. Tương tự, thêm mô hình Danh mục.

Bật EF Core

Mặc dù dự án .NET Core API có hỗ trợ sẵn cho EF Core và tất cả các phần phụ thuộc liên quan được tải xuống tại thời điểm tạo và biên dịch dự án có thể được tìm thấy trong phần SDK trong dự án như được hiển thị bên dưới.

 

Microsoft.EntityFrameworkCore.SqlServer (2.1.1) phải là gói bên trong SDK đã tải xuống. Nếu nó không có mặt, nó có thể được thêm vào dự án một cách rõ ràng thông qua Nuget Packages.

Thêm EF Core DbContext

Một bối cảnh cơ sở dữ liệu là cần thiết để các mô hình có thể tương tác với cơ sở dữ liệu.

  1. Thêm một thư mục mới có tên DBContexts vào dự án.

  2. Thêm một lớp mới có tên ProductContext bao gồm các thuộc tính DbSet cho Sản phẩm và Danh mục. OnModelCreating là một phương pháp mà thông qua đó dữ liệu chính có thể được đưa vào cơ sở dữ liệu. Vì vậy, hãy thêm phương thức OnModelCreating và thêm một số danh mục mẫu sẽ được thêm vào cơ sở dữ liệu ban đầu vào bảng danh mục khi cơ sở dữ liệu được tạo.



    Mã ProductContext
using Microsoft.EntityFrameworkCore;
using ProductMicroservice.Models;

namespace ProductMicroservice.DBContexts
{
  public class ProductContext : DbContext
  {
    public ProductContext(DbContextOptions<ProductContext> options) : base(options)
    {
    }
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
      modelBuilder.Entity<Category>().HasData(
          new Category
          {
            Id = 1,
            Name = "Electronics",
            Description = "Electronic Items",
          },
          new Category
          {
            Id = 2,
            Name = "Clothes",
            Description = "Dresses",
          },
          new Category
          {
            Id = 3,
            Name = "Grocery",
            Description = "Grocery Items",
          }
      );
    }

  }
}
  • Thêm một chuỗi kết nối trong tệp appsettings.json.

Mở tệp Startup.cs để thêm nhà cung cấp db máy chủ SQL cho EF Core. Thêm mã services.AddDbContext <ProductContext> (o => o.UseSqlServer (Configuration.GetConnectionString ("ProductDB"))); trong phương thức ConfigureServices. Lưu ý rằng trong phương thức GetConnectionString, tên của khóa của chuỗi kết nối được chuyển được thêm vào tệp appsettings.

 

Thêm kho lưu trữ

Kho lưu trữ hoạt động như một thành phần vi mô của microservice bao bọc lớp truy cập dữ liệu và cũng giúp duy trì độ bền và khả năng kiểm tra của dữ liệu.

  1. Thêm một thư mục mới có tên Kho lưu trữ trong dự án và thêm tên Giao diện IProductRepository trong thư mục đó. Thêm các phương thức trong giao diện thực hiện các hoạt động CRUD cho Dịch vụ vi mô của sản phẩm.

  2. Thêm một lớp cụ thể mới có tên là ProductRepository trong cùng một thư mục Repository triển khai IProductRepository. Tất cả những phương pháp này cần:

  3. Thêm triển khai cho các phương thức thông qua truy cập các phương thức ngữ cảnh.

    ProductRepository.cs
using Microsoft.EntityFrameworkCore;
using ProductMicroservice.DBContexts;
using ProductMicroservice.Models;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ProductMicroservice.Repository
{
  public class ProductRepository: IProductRepository
  {
    private readonly ProductContext _dbContext;

    public ProductRepository(ProductContext dbContext)
    {
      _dbContext = dbContext;
    }
    public void DeleteProduct(int productId)
    {
      var product = _dbContext.Products.Find(productId);
      _dbContext.Products.Remove(product);
      Save();
    }

    public Product GetProductByID(int productId)
    {
      return _dbContext.Products.Find(productId);
    }

    public IEnumerable<Product> GetProducts()
    {
      return _dbContext.Products.ToList();
    }

    public void InsertProduct(Product product)
    {
      _dbContext.Add(product);
      Save();    }

    public void Save()
    {
      _dbContext.SaveChanges();
    }

    public void UpdateProduct(Product product)
    {
      _dbContext.Entry(product).State = EntityState.Modified;
      Save();
    }
  }
}
  • Mở lớp Khởi động trong dự án và thêm mã dưới dạng services.AddTransient <IProductRepository, ProductRepository> (); bên trong phương thức ConfigureServices để sự phụ thuộc của kho lưu trữ được giải quyết tại thời điểm chạy khi cần thiết.

Thêm bộ điều khiển

Microservice phải có một điểm cuối cần có bộ điều khiển để hiển thị các phương thức HTTP cho máy khách như là điểm cuối của các phương thức dịch vụ.

  1. Nhấp chuột phải vào thư mục Bộ điều khiển và thêm Bộ điều khiển mới như hình dưới đây.

  2. Chọn tùy chọn “Bộ điều khiển API với các hành động đọc / ghi” để thêm bộ điều khiển.

  3. Đặt tên của bộ điều khiển là ProductController.

  4. Một lớp ProductController sẽ được thêm vào thư mục Bộ điều khiển với các hành động đọc / ghi mặc định sẽ được thay thế sau này bằng các hành động đọc / ghi sản phẩm và các phương thức HTTP được tạo hoạt động như một điểm cuối của dịch vụ.

  5. ValuesController có thể bị xóa khi không cần thiết.

  6. Thêm triển khai vào các phương thức bằng cách gọi các phương thức kho lưu trữ như được hiển thị bên dưới. Việc triển khai cơ bản được hiển thị ở đây để hiểu khái niệm. Các phương thức có thể được định tuyến thuộc tính và có thể được trang trí với nhiều chú thích hơn theo nhu cầu.

    ProductController.cs
using Microsoft.AspNetCore.Mvc;
using ProductMicroservice.Models;
using ProductMicroservice.Repository;
using System;
using System.Collections.Generic;
using System.Transactions;

namespace ProductMicroservice.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class ProductController : ControllerBase
  {

    private readonly IProductRepository _productRepository;

    public ProductController(IProductRepository productRepository)
    {
      _productRepository = productRepository;
    }

    [HttpGet]
    public IActionResult Get()
    {
      var products = _productRepository.GetProducts();
      return new OkObjectResult(products);
    }

    [HttpGet("{id}", Name = "Get")]
    public IActionResult Get(int id)
    {
      var product = _productRepository.GetProductByID(id);
      return new OkObjectResult(product);
    }

    [HttpPost]
    public IActionResult Post([FromBody] Product product)
    {
      using (var scope = new TransactionScope())
      {
        _productRepository.InsertProduct(product);
        scope.Complete();
        return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
      }
    }

    [HttpPut]
    public IActionResult Put([FromBody] Product product)
    {
      if (product != null)
      {
        using (var scope = new TransactionScope())
        {
          _productRepository.UpdateProduct(product);
          scope.Complete();
          return new OkResult();
        }
      }
      return new NoContentResult();
    }

    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
      _productRepository.DeleteProduct(id);
      return new OkResult();
    }
  }
}

Sự di chuyển cốt lõi của Khung thực thể

Di chuyển cho phép chúng tôi cung cấp mã để thay đổi cơ sở dữ liệu từ phiên bản này sang phiên bản khác.

  1. Mở Bảng điều khiển Trình quản lý Gói.

  2. Để kích hoạt quá trình di chuyển, hãy nhập lệnh, Add-Migration và đặt một cái tên có ý nghĩa cho ví dụ: InitialCreate và nhấn enter.

  3. Khi lệnh được thực thi, nếu chúng ta nhìn vào giải pháp của mình bây giờ, chúng ta sẽ thấy có một thư mục Migrations mới. Và nó chứa hai tệp. Một, ảnh chụp nhanh mô hình ngữ cảnh hiện tại của chúng tôi. Hãy kiểm tra các tập tin. Các tập tin rất tự giải thích.

  4. Để đảm bảo rằng việc di chuyển được áp dụng cho cơ sở dữ liệu, có một lệnh khác cho việc đó. Nó được gọi là cập nhật-cơ sở dữ liệu Nếu được thực thi, quá trình di chuyển sẽ được áp dụng cho cơ sở dữ liệu hiện tại.

  5. Kiểm tra SQL Server Management Studio để xác minh xem cơ sở dữ liệu đã được tạo chưa.

  6. Khi dữ liệu của bảng Danh mục được xem, dữ liệu chính mặc định của ba danh mục được hiển thị.

Chạy sản phẩm Microservice

Dịch vụ có thể được chạy qua IIS Express, tức là Visual Studio mặc định hoặc qua vùng chứa Docker.

Qua IIS Express

Chọn IIS Express trong Visual Studio như được hiển thị bên dưới và nhấn F5 hoặc nhấp vào chính nút IIS Express đó.

 

Ứng dụng sẽ hoạt động sau khi trang trình duyệt được khởi chạy. Vì nó không có gì để hiển thị nên nó sẽ trống, nhưng dịch vụ có thể được kiểm tra thông qua bất kỳ ứng dụng thử nghiệm API nào. Ở đây Postman được sử dụng để kiểm tra các điểm cuối của dịch vụ. Giữ nó mở và ứng dụng chạy.

 

Cài đặt Postman nếu nó không có trên máy và khởi chạy nó.

 

BƯU KIỆN

Để kiểm tra phương thức POST; tức là tạo một tài nguyên mới, chọn phương thức là POST trong postman và cung cấp điểm cuối, tức là https: // localhost: 44312 / api / product và trong phần Body, thêm một JSON tương tự như có thuộc tính của Product model như hình dưới đây và nhấp vào Gửi.

 

Phản hồi cũng được trả về cùng với Id của sản phẩm.

 

Phương thức “Đăng” của bộ điều khiển chịu trách nhiệm tạo một tài nguyên trong cơ sở dữ liệu và gửi phản hồi.

Dòng trả về CreatedAtAction (nameof (Get), new {id = product.Id}, product); trả về vị trí của tài nguyên đã tạo có thể được kiểm tra trong thuộc tính Vị trí trong phản hồi dưới tab Tiêu đề.

 

Thực hiện truy vấn chọn trên bảng sản phẩm và một hàng đã thêm được hiển thị cho sản phẩm mới được tạo.

 

Tạo thêm một sản phẩm theo cách tương tự.

 

LẤY

Thực hiện yêu cầu GET ngay bây giờ với cùng một địa chỉ và hai bản ghi được hiển thị dưới dạng phản hồi kết quả JSON.

 

XÓA BỎ

Thực hiện yêu cầu xóa bằng cách chọn XÓA làm động từ và thêm id là 1 (nếu sản phẩm có id 1 cần được xóa) và nhấn Gửi.

 

Trong cơ sở dữ liệu, một bản ghi có Id 1 sẽ bị xóa.

 

ĐẶT

Động từ PUT chịu trách nhiệm cập nhật tài nguyên. Chọn động từ PUT, cung cấp địa chỉ API và trong phần Body, cung cấp thông tin chi tiết về sản phẩm nào cần được cập nhật ở định dạng JSON. Ví dụ: cập nhật sản phẩm với Id 2 và cập nhật tên, mô tả và giá của sản phẩm đó từ Samsung đến iPhone cụ thể. Nhấn Gửi.

 

Kiểm tra cơ sở dữ liệu để xem sản phẩm cập nhật.

 

Qua Docker Container

Việc chạy dịch vụ có thể được thực hiện thông qua các lệnh của docker để chạy trong dấu nhắc lệnh của docker và sử dụng visual studio. Vì chúng tôi đã thêm hỗ trợ docker, nên dễ dàng chạy dịch vụ trong docker container bằng cách sử dụng studio trực quan.

  1. Thêm hỗ trợ bộ điều phối vùng chứa trong giải pháp như được hiển thị bên dưới.

  2. Điều này sẽ yêu cầu người dàn nhạc. Chọn Docker Compose và nhấn OK.



    Sau khi được thêm vào giải pháp, giải pháp sẽ giống như được hiển thị bên dưới có docker-compile với dockerignore và docker-compos.yml và tệp ghi đè của nó.



    Ngay sau khi giải pháp được lưu, nó sẽ xây dựng dự án bên dưới vùng chứa và tạo hình ảnh docker. Tất cả các lệnh thực thi có thể được nhìn thấy trong cửa sổ đầu ra khi giải pháp được lưu.
  3. Mở dấu nhắc lệnh ở chế độ quản trị và điều hướng đến cùng một thư mục chứa các tệp dự án.

  4. Chạy các hình ảnh docker lệnh để xem tất cả các hình ảnh đã tạo. Chúng tôi thấy hình ảnh ProductMicroservice là hình ảnh mới nhất.

  5. Bây giờ hãy chạy ứng dụng với Docker dưới dạng tùy chọn như hình dưới đây.

  6. Bây giờ, chạy ps docker lệnh để xem các vùng chứa đang chạy. Nó cho thấy vùng chứa đang chạy trên cổng 32773: 80.

  7. Vì vùng chứa đang ở trạng thái chạy, nên tốt hơn là bạn nên kiểm tra dịch vụ hiện đang chạy bên dưới vùng chứa. Để kiểm tra dịch vụ, hãy thay thế "giá trị" bằng "sản phẩm" trong địa chỉ như hình dưới đây. Tốt nhất, nó sẽ nhận được các chi tiết sản phẩm. Nhưng nó cho ngoại lệ như hình dưới đây.

  8. Chạy cùng một thứ trong IIS Express hoạt động tốt, tức là trên cổng 44312. Thay thế "giá trị" bằng sản phẩm để nhận thông tin chi tiết về sản phẩm,

  9. Vì trong ứng dụng IIS Express chạy tốt chứ không phải trong bộ chứa docker, lỗi rõ ràng cho thấy có điều gì đó không ổn với máy chủ SQL khiến nó không hiểu vùng chứa docker của chúng tôi hoặc nó không chạy trong vùng chứa docker. Trong trường hợp này, bộ chứa docker đang chạy như một máy riêng biệt bên trong máy tính chủ. Vì vậy, để kết nối với cơ sở dữ liệu SQL trong máy chủ, các kết nối từ xa tới SQL cần được kích hoạt. Chúng tôi có thể sửa lỗi này.
     
  10. Mở Trình quản lý Cấu hình Máy chủ SQL. Bây giờ chọn Giao thức cho MSSQLSERVER và lấy số cổng IPAll trong phần TCP / IP.






  11. Chuỗi kết nối được đề cập trong tệp JSON trỏ đến nguồn dữ liệu là cục bộ mà vùng chứa docker không hiểu. Nó cần địa chỉ IP thích hợp với xác thực cổng và SQL. Vì vậy, hãy cung cấp các chi tiết liên quan tức là Nguồn dữ liệu như địa chỉ Ip, số cổng và chi tiết xác thực SQL như được hiển thị bên dưới.

  12. Bây giờ một lần nữa chạy ứng dụng với Docker như một tùy chọn như đã thực hiện trước đó.



    Lần này nhận được phản hồi.
  13. Thử nghiệm tương tự trong Người đưa thư.

  14. Kiểm tra lại với IIS Express URL.

Điều này chứng tỏ rằng microservice đang chạy trên hai điểm cuối và trên hai hệ điều hành được triển khai cục bộ một cách độc lập.

Sự kết luận

Dịch vụ vi mô là một dịch vụ được xây dựng xung quanh một khả năng kinh doanh cụ thể, có thể được triển khai độc lập được gọi là ngữ cảnh bị ràng buộc. Bài viết này về microservices tập trung vào microservices là gì và lợi thế của chúng so với kiến ​​trúc dịch vụ nguyên khối. Bài viết mô tả chi tiết để phát triển một microservice bằng ASP.NET Core và chạy nó qua IIS và Docker container. Tương tự như vậy, dịch vụ có thể có nhiều hình ảnh và có thể được chạy trên nhiều vùng chứa tại cùng một thời điểm.

Nguồn bài viết gốc tại https://www.c-sharpcorner.com

#microservice #aspdotnet #dotnet #csharp #docker

What is GEEK

Buddha Community

Xây dựng, Triển khai và Kiểm tra Microservices với .NET, C# và Docker
Duong Tran

Duong Tran

1658887312

Xây dựng, Triển khai và Kiểm tra Microservices với .NET, C# và Docker

Tìm hiểu khái niệm về Kiến trúc Microservices. Tìm hiểu cách xây dựng, triển khai và kiểm tra Kiến trúc Microservices trong .NET và C # bằng cách sử dụng vùng chứa Docker.

Microservices

Thuật ngữ microservices mô tả một phong cách phát triển phần mềm đã phát triển từ các xu hướng hiện đại để thiết lập các phương pháp thực hành nhằm tăng tốc độ và hiệu quả của việc phát triển và quản lý các giải pháp phần mềm trên quy mô lớn. Microservices thiên về việc áp dụng một số nguyên tắc và mô hình kiến ​​trúc nhất định làm kiến ​​trúc. Mỗi microservice sống độc lập, nhưng mặt khác, tất cả cũng dựa vào nhau. Tất cả các microservices trong một dự án đều được triển khai trong quá trình sản xuất theo tốc độ riêng của chúng, tại chỗ trên đám mây, độc lập, sống song song với nhau.

Trong bài viết này, chúng ta sẽ tìm hiểu khái niệm về Microservices, kiến ​​trúc của chúng và cách tạo microservices trong .NET và C #. Bạn cũng sẽ tìm hiểu các bước để xây dựng, triển khai và kiểm tra các microservices trong .NET bằng cách sử dụng bộ chứa docker.

Kiến trúc Microservices

Hình ảnh sau đây từ Microsoft Docs cho thấy kiểu kiến ​​trúc microservices.

 

Có nhiều thành phần khác nhau trong kiến ​​trúc microservices ngoài bản thân microservices.

Quản lý . Duy trì các nút cho dịch vụ.

Nhà cung cấp danh tính . Quản lý thông tin nhận dạng và cung cấp dịch vụ xác thực trong mạng phân tán.

Khám phá dịch vụ . Theo dõi các dịch vụ và địa chỉ dịch vụ và điểm cuối.

Cổng API . Đóng vai trò là điểm vào của khách hàng. Một đầu mối liên hệ từ khách hàng sẽ trả lại phản hồi từ các dịch vụ nhỏ cơ bản và đôi khi là phản hồi tổng hợp từ nhiều dịch vụ vi mô cơ bản.

CDN . Mạng phân phối nội dung để cung cấp tài nguyên tĩnh cho các trang và nội dung web trong mạng phân tán

Nội dung tĩnh Các tài nguyên tĩnh như các trang và nội dung web

Các dịch vụ vi mô được triển khai độc lập với cơ sở dữ liệu của riêng chúng cho mỗi dịch vụ, do đó các dịch vụ vi mô cơ bản trông như thể hiện trong hình sau.

 

Kiến trúc nguyên khối so với Microservices

Các ứng dụng nguyên khối không chỉ là một gói hoàn chỉnh có tất cả các thành phần và dịch vụ cần thiết liên quan được gói gọn trong một gói.

Sau đây là biểu diễn sơ đồ của kiến ​​trúc nguyên khối được đóng gói hoàn toàn hoặc dựa trên dịch vụ.

 

Microservice là một cách tiếp cận để tạo ra các dịch vụ nhỏ, mỗi dịch vụ chạy trong không gian riêng của chúng và có thể giao tiếp qua tin nhắn. Đây là các dịch vụ độc lập gọi trực tiếp cơ sở dữ liệu của riêng chúng.

Sau đây là biểu diễn sơ đồ của kiến ​​trúc microservices.

 

Trong kiến ​​trúc nguyên khối, cơ sở dữ liệu vẫn giữ nguyên cho tất cả các chức năng ngay cả khi tuân theo cách tiếp cận của kiến ​​trúc hướng dịch vụ, trong khi trong microservices, mỗi dịch vụ sẽ có cơ sở dữ liệu riêng.

Docker Containers và cài đặt Docker

Các vùng chứa như Dockers và những vùng khác chia nhỏ tài nguyên của hệ điều hành, chẳng hạn như ngăn xếp mạng, không gian tên quy trình, phân cấp hệ thống tệp và ngăn xếp lưu trữ. Dockers giống như ảo hóa hệ điều hành hơn. Tìm hiểu thêm về dockers tại đây . Mở URL này và nhấp vào Tải xuống từ trung tâm Docker. Sau khi tải xuống, hãy đăng nhập vào Docker và làm theo hướng dẫn để cài đặt Docker cho Windows.

Microservice sử dụng ASP.NET Core

Phần này sẽ trình bày cách tạo một dịch vụ sản phẩm nhỏ bằng cách sử dụng ASP.NET Core từng bước với sự trợ giúp của hình ảnh. Dịch vụ sẽ được xây dựng bằng ASP.NET Core 2.1 và Visual Studio 2017. Asp.NET Core được tích hợp với VS 2017. Dịch vụ này sẽ có DBcontext và cơ sở dữ liệu riêng với kho lưu trữ riêng biệt để dịch vụ có thể được triển khai độc lập.

 

Tạo giải pháp ứng dụng cốt lõi ASP.NET

  1. Mở Visual Studio và thêm một dự án mới.

  2. Chọn ứng dụng là ASP.NET Core Web Application và đặt cho nó một cái tên có ý nghĩa.

  3. Tiếp theo, chọn API làm loại dự án và đảm bảo rằng tùy chọn “Bật hỗ trợ Docker” được chọn với loại hệ điều hành là Linux.

  4. Giải pháp sẽ như hình dưới đây.

Thêm mô hình

  1. Thêm một thư mục mới có tên "Model" vào dự án.

  2. Trong thư mục Mô hình, thêm một lớp có tên Sản phẩm.

  3. Thêm một số thuộc tính như Id, Tên, Mô tả, Giá vào loại sản phẩm. Sản phẩm cũng phải thuộc loại nào đó và đối với điều đó, mô hình danh mục được xác định và thuộc tính CategoryId được thêm vào mô hình sản phẩm.

  4. Tương tự, thêm mô hình Danh mục.

Bật EF Core

Mặc dù dự án .NET Core API có hỗ trợ sẵn cho EF Core và tất cả các phần phụ thuộc liên quan được tải xuống tại thời điểm tạo và biên dịch dự án có thể được tìm thấy trong phần SDK trong dự án như được hiển thị bên dưới.

 

Microsoft.EntityFrameworkCore.SqlServer (2.1.1) phải là gói bên trong SDK đã tải xuống. Nếu nó không có mặt, nó có thể được thêm vào dự án một cách rõ ràng thông qua Nuget Packages.

Thêm EF Core DbContext

Một bối cảnh cơ sở dữ liệu là cần thiết để các mô hình có thể tương tác với cơ sở dữ liệu.

  1. Thêm một thư mục mới có tên DBContexts vào dự án.

  2. Thêm một lớp mới có tên ProductContext bao gồm các thuộc tính DbSet cho Sản phẩm và Danh mục. OnModelCreating là một phương pháp mà thông qua đó dữ liệu chính có thể được đưa vào cơ sở dữ liệu. Vì vậy, hãy thêm phương thức OnModelCreating và thêm một số danh mục mẫu sẽ được thêm vào cơ sở dữ liệu ban đầu vào bảng danh mục khi cơ sở dữ liệu được tạo.



    Mã ProductContext
using Microsoft.EntityFrameworkCore;
using ProductMicroservice.Models;

namespace ProductMicroservice.DBContexts
{
  public class ProductContext : DbContext
  {
    public ProductContext(DbContextOptions<ProductContext> options) : base(options)
    {
    }
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
      modelBuilder.Entity<Category>().HasData(
          new Category
          {
            Id = 1,
            Name = "Electronics",
            Description = "Electronic Items",
          },
          new Category
          {
            Id = 2,
            Name = "Clothes",
            Description = "Dresses",
          },
          new Category
          {
            Id = 3,
            Name = "Grocery",
            Description = "Grocery Items",
          }
      );
    }

  }
}
  • Thêm một chuỗi kết nối trong tệp appsettings.json.

Mở tệp Startup.cs để thêm nhà cung cấp db máy chủ SQL cho EF Core. Thêm mã services.AddDbContext <ProductContext> (o => o.UseSqlServer (Configuration.GetConnectionString ("ProductDB"))); trong phương thức ConfigureServices. Lưu ý rằng trong phương thức GetConnectionString, tên của khóa của chuỗi kết nối được chuyển được thêm vào tệp appsettings.

 

Thêm kho lưu trữ

Kho lưu trữ hoạt động như một thành phần vi mô của microservice bao bọc lớp truy cập dữ liệu và cũng giúp duy trì độ bền và khả năng kiểm tra của dữ liệu.

  1. Thêm một thư mục mới có tên Kho lưu trữ trong dự án và thêm tên Giao diện IProductRepository trong thư mục đó. Thêm các phương thức trong giao diện thực hiện các hoạt động CRUD cho Dịch vụ vi mô của sản phẩm.

  2. Thêm một lớp cụ thể mới có tên là ProductRepository trong cùng một thư mục Repository triển khai IProductRepository. Tất cả những phương pháp này cần:

  3. Thêm triển khai cho các phương thức thông qua truy cập các phương thức ngữ cảnh.

    ProductRepository.cs
using Microsoft.EntityFrameworkCore;
using ProductMicroservice.DBContexts;
using ProductMicroservice.Models;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ProductMicroservice.Repository
{
  public class ProductRepository: IProductRepository
  {
    private readonly ProductContext _dbContext;

    public ProductRepository(ProductContext dbContext)
    {
      _dbContext = dbContext;
    }
    public void DeleteProduct(int productId)
    {
      var product = _dbContext.Products.Find(productId);
      _dbContext.Products.Remove(product);
      Save();
    }

    public Product GetProductByID(int productId)
    {
      return _dbContext.Products.Find(productId);
    }

    public IEnumerable<Product> GetProducts()
    {
      return _dbContext.Products.ToList();
    }

    public void InsertProduct(Product product)
    {
      _dbContext.Add(product);
      Save();    }

    public void Save()
    {
      _dbContext.SaveChanges();
    }

    public void UpdateProduct(Product product)
    {
      _dbContext.Entry(product).State = EntityState.Modified;
      Save();
    }
  }
}
  • Mở lớp Khởi động trong dự án và thêm mã dưới dạng services.AddTransient <IProductRepository, ProductRepository> (); bên trong phương thức ConfigureServices để sự phụ thuộc của kho lưu trữ được giải quyết tại thời điểm chạy khi cần thiết.

Thêm bộ điều khiển

Microservice phải có một điểm cuối cần có bộ điều khiển để hiển thị các phương thức HTTP cho máy khách như là điểm cuối của các phương thức dịch vụ.

  1. Nhấp chuột phải vào thư mục Bộ điều khiển và thêm Bộ điều khiển mới như hình dưới đây.

  2. Chọn tùy chọn “Bộ điều khiển API với các hành động đọc / ghi” để thêm bộ điều khiển.

  3. Đặt tên của bộ điều khiển là ProductController.

  4. Một lớp ProductController sẽ được thêm vào thư mục Bộ điều khiển với các hành động đọc / ghi mặc định sẽ được thay thế sau này bằng các hành động đọc / ghi sản phẩm và các phương thức HTTP được tạo hoạt động như một điểm cuối của dịch vụ.

  5. ValuesController có thể bị xóa khi không cần thiết.

  6. Thêm triển khai vào các phương thức bằng cách gọi các phương thức kho lưu trữ như được hiển thị bên dưới. Việc triển khai cơ bản được hiển thị ở đây để hiểu khái niệm. Các phương thức có thể được định tuyến thuộc tính và có thể được trang trí với nhiều chú thích hơn theo nhu cầu.

    ProductController.cs
using Microsoft.AspNetCore.Mvc;
using ProductMicroservice.Models;
using ProductMicroservice.Repository;
using System;
using System.Collections.Generic;
using System.Transactions;

namespace ProductMicroservice.Controllers
{
  [Route("api/[controller]")]
  [ApiController]
  public class ProductController : ControllerBase
  {

    private readonly IProductRepository _productRepository;

    public ProductController(IProductRepository productRepository)
    {
      _productRepository = productRepository;
    }

    [HttpGet]
    public IActionResult Get()
    {
      var products = _productRepository.GetProducts();
      return new OkObjectResult(products);
    }

    [HttpGet("{id}", Name = "Get")]
    public IActionResult Get(int id)
    {
      var product = _productRepository.GetProductByID(id);
      return new OkObjectResult(product);
    }

    [HttpPost]
    public IActionResult Post([FromBody] Product product)
    {
      using (var scope = new TransactionScope())
      {
        _productRepository.InsertProduct(product);
        scope.Complete();
        return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
      }
    }

    [HttpPut]
    public IActionResult Put([FromBody] Product product)
    {
      if (product != null)
      {
        using (var scope = new TransactionScope())
        {
          _productRepository.UpdateProduct(product);
          scope.Complete();
          return new OkResult();
        }
      }
      return new NoContentResult();
    }

    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
      _productRepository.DeleteProduct(id);
      return new OkResult();
    }
  }
}

Sự di chuyển cốt lõi của Khung thực thể

Di chuyển cho phép chúng tôi cung cấp mã để thay đổi cơ sở dữ liệu từ phiên bản này sang phiên bản khác.

  1. Mở Bảng điều khiển Trình quản lý Gói.

  2. Để kích hoạt quá trình di chuyển, hãy nhập lệnh, Add-Migration và đặt một cái tên có ý nghĩa cho ví dụ: InitialCreate và nhấn enter.

  3. Khi lệnh được thực thi, nếu chúng ta nhìn vào giải pháp của mình bây giờ, chúng ta sẽ thấy có một thư mục Migrations mới. Và nó chứa hai tệp. Một, ảnh chụp nhanh mô hình ngữ cảnh hiện tại của chúng tôi. Hãy kiểm tra các tập tin. Các tập tin rất tự giải thích.

  4. Để đảm bảo rằng việc di chuyển được áp dụng cho cơ sở dữ liệu, có một lệnh khác cho việc đó. Nó được gọi là cập nhật-cơ sở dữ liệu Nếu được thực thi, quá trình di chuyển sẽ được áp dụng cho cơ sở dữ liệu hiện tại.

  5. Kiểm tra SQL Server Management Studio để xác minh xem cơ sở dữ liệu đã được tạo chưa.

  6. Khi dữ liệu của bảng Danh mục được xem, dữ liệu chính mặc định của ba danh mục được hiển thị.

Chạy sản phẩm Microservice

Dịch vụ có thể được chạy qua IIS Express, tức là Visual Studio mặc định hoặc qua vùng chứa Docker.

Qua IIS Express

Chọn IIS Express trong Visual Studio như được hiển thị bên dưới và nhấn F5 hoặc nhấp vào chính nút IIS Express đó.

 

Ứng dụng sẽ hoạt động sau khi trang trình duyệt được khởi chạy. Vì nó không có gì để hiển thị nên nó sẽ trống, nhưng dịch vụ có thể được kiểm tra thông qua bất kỳ ứng dụng thử nghiệm API nào. Ở đây Postman được sử dụng để kiểm tra các điểm cuối của dịch vụ. Giữ nó mở và ứng dụng chạy.

 

Cài đặt Postman nếu nó không có trên máy và khởi chạy nó.

 

BƯU KIỆN

Để kiểm tra phương thức POST; tức là tạo một tài nguyên mới, chọn phương thức là POST trong postman và cung cấp điểm cuối, tức là https: // localhost: 44312 / api / product và trong phần Body, thêm một JSON tương tự như có thuộc tính của Product model như hình dưới đây và nhấp vào Gửi.

 

Phản hồi cũng được trả về cùng với Id của sản phẩm.

 

Phương thức “Đăng” của bộ điều khiển chịu trách nhiệm tạo một tài nguyên trong cơ sở dữ liệu và gửi phản hồi.

Dòng trả về CreatedAtAction (nameof (Get), new {id = product.Id}, product); trả về vị trí của tài nguyên đã tạo có thể được kiểm tra trong thuộc tính Vị trí trong phản hồi dưới tab Tiêu đề.

 

Thực hiện truy vấn chọn trên bảng sản phẩm và một hàng đã thêm được hiển thị cho sản phẩm mới được tạo.

 

Tạo thêm một sản phẩm theo cách tương tự.

 

LẤY

Thực hiện yêu cầu GET ngay bây giờ với cùng một địa chỉ và hai bản ghi được hiển thị dưới dạng phản hồi kết quả JSON.

 

XÓA BỎ

Thực hiện yêu cầu xóa bằng cách chọn XÓA làm động từ và thêm id là 1 (nếu sản phẩm có id 1 cần được xóa) và nhấn Gửi.

 

Trong cơ sở dữ liệu, một bản ghi có Id 1 sẽ bị xóa.

 

ĐẶT

Động từ PUT chịu trách nhiệm cập nhật tài nguyên. Chọn động từ PUT, cung cấp địa chỉ API và trong phần Body, cung cấp thông tin chi tiết về sản phẩm nào cần được cập nhật ở định dạng JSON. Ví dụ: cập nhật sản phẩm với Id 2 và cập nhật tên, mô tả và giá của sản phẩm đó từ Samsung đến iPhone cụ thể. Nhấn Gửi.

 

Kiểm tra cơ sở dữ liệu để xem sản phẩm cập nhật.

 

Qua Docker Container

Việc chạy dịch vụ có thể được thực hiện thông qua các lệnh của docker để chạy trong dấu nhắc lệnh của docker và sử dụng visual studio. Vì chúng tôi đã thêm hỗ trợ docker, nên dễ dàng chạy dịch vụ trong docker container bằng cách sử dụng studio trực quan.

  1. Thêm hỗ trợ bộ điều phối vùng chứa trong giải pháp như được hiển thị bên dưới.

  2. Điều này sẽ yêu cầu người dàn nhạc. Chọn Docker Compose và nhấn OK.



    Sau khi được thêm vào giải pháp, giải pháp sẽ giống như được hiển thị bên dưới có docker-compile với dockerignore và docker-compos.yml và tệp ghi đè của nó.



    Ngay sau khi giải pháp được lưu, nó sẽ xây dựng dự án bên dưới vùng chứa và tạo hình ảnh docker. Tất cả các lệnh thực thi có thể được nhìn thấy trong cửa sổ đầu ra khi giải pháp được lưu.
  3. Mở dấu nhắc lệnh ở chế độ quản trị và điều hướng đến cùng một thư mục chứa các tệp dự án.

  4. Chạy các hình ảnh docker lệnh để xem tất cả các hình ảnh đã tạo. Chúng tôi thấy hình ảnh ProductMicroservice là hình ảnh mới nhất.

  5. Bây giờ hãy chạy ứng dụng với Docker dưới dạng tùy chọn như hình dưới đây.

  6. Bây giờ, chạy ps docker lệnh để xem các vùng chứa đang chạy. Nó cho thấy vùng chứa đang chạy trên cổng 32773: 80.

  7. Vì vùng chứa đang ở trạng thái chạy, nên tốt hơn là bạn nên kiểm tra dịch vụ hiện đang chạy bên dưới vùng chứa. Để kiểm tra dịch vụ, hãy thay thế "giá trị" bằng "sản phẩm" trong địa chỉ như hình dưới đây. Tốt nhất, nó sẽ nhận được các chi tiết sản phẩm. Nhưng nó cho ngoại lệ như hình dưới đây.

  8. Chạy cùng một thứ trong IIS Express hoạt động tốt, tức là trên cổng 44312. Thay thế "giá trị" bằng sản phẩm để nhận thông tin chi tiết về sản phẩm,

  9. Vì trong ứng dụng IIS Express chạy tốt chứ không phải trong bộ chứa docker, lỗi rõ ràng cho thấy có điều gì đó không ổn với máy chủ SQL khiến nó không hiểu vùng chứa docker của chúng tôi hoặc nó không chạy trong vùng chứa docker. Trong trường hợp này, bộ chứa docker đang chạy như một máy riêng biệt bên trong máy tính chủ. Vì vậy, để kết nối với cơ sở dữ liệu SQL trong máy chủ, các kết nối từ xa tới SQL cần được kích hoạt. Chúng tôi có thể sửa lỗi này.
     
  10. Mở Trình quản lý Cấu hình Máy chủ SQL. Bây giờ chọn Giao thức cho MSSQLSERVER và lấy số cổng IPAll trong phần TCP / IP.






  11. Chuỗi kết nối được đề cập trong tệp JSON trỏ đến nguồn dữ liệu là cục bộ mà vùng chứa docker không hiểu. Nó cần địa chỉ IP thích hợp với xác thực cổng và SQL. Vì vậy, hãy cung cấp các chi tiết liên quan tức là Nguồn dữ liệu như địa chỉ Ip, số cổng và chi tiết xác thực SQL như được hiển thị bên dưới.

  12. Bây giờ một lần nữa chạy ứng dụng với Docker như một tùy chọn như đã thực hiện trước đó.



    Lần này nhận được phản hồi.
  13. Thử nghiệm tương tự trong Người đưa thư.

  14. Kiểm tra lại với IIS Express URL.

Điều này chứng tỏ rằng microservice đang chạy trên hai điểm cuối và trên hai hệ điều hành được triển khai cục bộ một cách độc lập.

Sự kết luận

Dịch vụ vi mô là một dịch vụ được xây dựng xung quanh một khả năng kinh doanh cụ thể, có thể được triển khai độc lập được gọi là ngữ cảnh bị ràng buộc. Bài viết này về microservices tập trung vào microservices là gì và lợi thế của chúng so với kiến ​​trúc dịch vụ nguyên khối. Bài viết mô tả chi tiết để phát triển một microservice bằng ASP.NET Core và chạy nó qua IIS và Docker container. Tương tự như vậy, dịch vụ có thể có nhiều hình ảnh và có thể được chạy trên nhiều vùng chứa tại cùng một thời điểm.

Nguồn bài viết gốc tại https://www.c-sharpcorner.com

#microservice #aspdotnet #dotnet #csharp #docker

Einar  Hintz

Einar Hintz

1602560783

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

To demonstrate CRUD operations – insert, update, delete and retrieve, the project will be dealing with details of a normal bank transaction. GitHub repository for this demo project : https://bit.ly/33KTJAu.

Sub-topics discussed :

  • Form design for insert and update operation.
  • Display forms in modal popup dialog.
  • Form post using jQuery Ajax.
  • Implement MVC CRUD operations with jQuery Ajax.
  • Loading spinner in .NET Core MVC.
  • Prevent direct access to MVC action method.

Create ASP.NET Core MVC Project

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N).

From new project window, Select Asp.Net Core Web Application_._

Image showing how to create ASP.NET Core Web API project in Visual Studio.

Once you provide the project name and location. Select Web Application(Model-View-Controller) and uncheck HTTPS Configuration. Above steps will create a brand new ASP.NET Core MVC project.

Showing project template selection for .NET Core MVC.

Setup a Database

Let’s create a database for this application using Entity Framework Core. For that we’ve to install corresponding NuGet Packages. Right click on project from solution explorer, select Manage NuGet Packages_,_ From browse tab, install following 3 packages.

Showing list of NuGet Packages for Entity Framework Core

Now let’s define DB model class file – /Models/TransactionModel.cs.

public class TransactionModel
{
    [Key]
    public int TransactionId { get; set; }

    [Column(TypeName ="nvarchar(12)")]
    [DisplayName("Account Number")]
    [Required(ErrorMessage ="This Field is required.")]
    [MaxLength(12,ErrorMessage ="Maximum 12 characters only")]
    public string AccountNumber { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Beneficiary Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BeneficiaryName { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Bank Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BankName { get; set; }

    [Column(TypeName ="nvarchar(11)")]
    [DisplayName("SWIFT Code")]
    [Required(ErrorMessage = "This Field is required.")]
    [MaxLength(11)]
    public string SWIFTCode { get; set; }

    [DisplayName("Amount")]
    [Required(ErrorMessage = "This Field is required.")]
    public int Amount { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime Date { get; set; }
}

C#Copy

Here we’ve defined model properties for the transaction with proper validation. Now let’s define  DbContextclass for EF Core.

#asp.net core article #asp.net core #add loading spinner in asp.net core #asp.net core crud without reloading #asp.net core jquery ajax form #asp.net core modal dialog #asp.net core mvc crud using jquery ajax #asp.net core mvc with jquery and ajax #asp.net core popup window #bootstrap modal popup in asp.net core mvc. bootstrap modal popup in asp.net core #delete and viewall in asp.net core #jquery ajax - insert #jquery ajax form post #modal popup dialog in asp.net core #no direct access action method #update #validation in modal popup

Eric  Bukenya

Eric Bukenya

1618666860

.NET Conf 2020 Demos & Sessions for .NET 5 + Virtual Events!

This year’s .NET Conf was the largest one yet, with over 80 live sessions across three days that were co-organized and presented by the .NET community and Microsoft. On top of all of that, it also marked the release of .NET 5.0  that brings a full set of new capabilities, performance gains, and new languages features for developers to create amazing apps. If you missed this year’s .NET Conf live stream, don’t worry because we have you covered!

#.net #.net core #asp.net #c# #.net conf #.net foundation #community #demos

Iliana  Welch

Iliana Welch

1597368540

Docker Tutorial for Beginners 8 - Build and Run C++ Applications in a Docker Container

Docker is an open platform that allows use package, develop, run, and ship software applications in different environments using containers.
In this course We will learn How to Write Dockerfiles, Working with the Docker Toolbox, How to Work with the Docker Machine, How to Use Docker Compose to fire up multiple containers, How to Work with Docker Kinematic, Push images to Docker Hub, Pull images from a Docker Registery, Push stacks of servers to Docker Hub.
How to install Docker on Mac.

#docker tutorial #c++ #docker container #docker #docker hub #devopstools

Rider 2021.1: Updates to Docker and C# Support, Scaffolding in ASP.NET, and More!

Update to Docker Support

Adding Docker support to a project in Rider is now easier – you can generate the Dockerfile while creating a new project. Just select Docker Support in the New project dialog. If you want to add a Dockerfile to an existing project, use** Add | Docker Support** in the context menu for a project in the Solution Explorer tool window.

Rider can also run Dockerfiles generated by Visual Studio with no additional changes required from you.

#net-tools #releases #debugger #c# #c++ #c