文章目錄 項目地址 一、grpc介紹 二、Discount grpc創建 2.1 實體層 2.2 Protos 1. 創建discount.proto 2. 配置proto 3. 創建DiscountService 4. Program里注冊服務 2.3 Seed 數據 1. 創建表和Seed數據 2. 自動migration 2.4 更新Docker 1. 更新Docker file 2. 更新Docker compose 三、消費者 3.1 使用grpc消息 1. 創建grpc的引用 2. 使用grpc消息 3. grpc服務注冊 3.2 構建docker 1. 重新構建docker file 2. docker compose
項目地址
dbt
airflow
一、grpc介紹
1.1 項目初始化
1. 創建grpc項目
2. 項目結構
Protos:用來存放協議文件.proto
,協議有三部分組成 1. service 2.rpc 3.message
二、Discount grpc創建
2.1 實體層
1. Coupon實體
namespace Discount. Grpc. Models ;
public class Coupon
{ public int Id { get ; set ; } public string ProductName { get ; set ; } = default ! ; public string Description { get ; set ; } = default ! ; public int Amount { get ; set ; }
}
2.2 Protos
1. 創建discount.proto
syntax = "proto3" ;
option csharp_namespace = "Discount.Grpc" ;
package discount;
service DiscountProtoService { rpc GetDiscount ( GetDiscountRequest) returns ( CouponModel) ; rpc CreateDiscount ( CreateDiscountRequest) returns ( CouponModel) ; rpc UpdateDiscount ( UpdateDiscountRequest) returns ( CouponModel) ; rpc DeleteDiscount ( DeleteDiscountRequest) returns ( DeleteDiscountResponse) ;
}
message GetDiscountRequest { string productName = 1 ;
}
message CouponModel { int32 id = 1 ; string productName = 2 ; string description = 3 ; int32 amount = 4 ;
}
message CreateDiscountRequest { CouponModel coupon = 1 ;
}
message UpdateDiscountRequest { CouponModel coupon = 1 ;
}
message DeleteDiscountRequest { string productName = 1 ;
}
message DeleteDiscountResponse { bool success = 1 ;
}
2. 配置proto
< ItemGroup> < Protobuf Include= "Protos\discount.proto" GrpcServices= "Server" / > < / ItemGroup>
3. 創建DiscountService
DiscountService.cs
:實現Proto的,使用Mapster
namespace Discount. Grpc. Services ; public class DiscountService ( DiscountContext dbContext, ILogger< DiscountService> logger) : DiscountProtoService. DiscountProtoServiceBase
{ public override async Task< CouponModel> GetDiscount ( GetDiscountRequest request, ServerCallContext context) { var coupon = await dbContext. Coupons. FirstOrDefaultAsync ( x => x. ProductName == request. ProductName) ; if ( coupon is null ) coupon = new Coupon { ProductName