简介
本专题将带你使用 axum 和 gRPC 构建一个分布式的博客系统数据结构与Protobuf
本章对我们项目的数据结构和proto进行定义实现分类服务
本章我们实现分类服务,即 `category-srv`实现文章服务
本章将带你实现文章的 gPRC 服务。实现前台web服务
本章将通过使用 axum 调用分类和文章的 gRPC 服务,来实现博客前台Web服务实现管理员服务
本章我们将实现管理员服务实现后台管理web服务
本章将使用 axum 调用 gRPC 服务来实现后台管理的 web 服务安全与鉴权
本章将讨论使用jwt进行鉴权服务扩容、注册、发现和编排
本章将讨论服务管理相关的话题配置中心服务
本章讨论配置中心的实现总结
本专题试图通过一个分布式博客的案例来探讨使用 rust 实现 gRPC 微服务架构的可行性
数据结构与Protobuf
本章对我们项目的数据结构和proto进行定义。
数据结构
分类服务的定义
syntax = "proto3";
package pb;
message Category {
int32 id = 1;
string name = 2;
bool is_del = 3;
}
// --- 创建分类
message CreateCategoryRequest { string name = 1; }
message CreateCategoryReply { int32 id = 1; }
// -- 修改分类
message EditCategoryRequest {
int32 id = 1;
string name = 2;
}
message EditCategoryReply {
int32 id = 1;
bool ok = 2;
}
// -- 分类列表
message ListCategoryRequest {
optional string name = 1; // 根据分类名称查找
optional bool is_del = 2; // 是否删除
}
message ListCategoryReply { repeated Category categories = 1; }
// -- 删除/恢复分类
message ToggleCategoryRequest { int32 id = 1; }
message ToggleCategoryReply {
int32 id = 1;
bool is_del = 2;
}
// -- 分类是否存在
message CategoryExistsRequest {
oneof condition {
string name = 1;
int32 id = 2;
}
}
message CategoryExistsReply { bool exists = 1; }
// -- 分类详情
message GetCategoryRequest {
int32 id = 1;
optional bool is_del = 2;
}
message GetCategoryReply { optional Category category = 1; }
service CategoryService {
// 创建分类
rpc CreateCategory(CreateCategoryRequest) returns (CreateCategoryReply);
// 修改分类
rpc EditCategory(EditCategoryRequest) returns (EditCategoryReply);
// 分类列表
rpc ListCategory(ListCategoryRequest) returns (ListCategoryReply);
// 删除/恢复分类
rpc ToggleCategory(ToggleCategoryRequest) returns (ToggleCategoryReply);
// 分类是否存在
rpc CategoryExists(CategoryExistsRequest) returns (CategoryExistsReply);
// 获取分类详情
rpc GetCategory(GetCategoryRequest) returns (GetCategoryReply);
}
管理员服务的定义
本章代码位于01/数据结构与protobuf分支