文章目录 项目地址 一、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