简介
本专题将带你使用 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 Admin {
int32 id = 1;
string email = 2;
optional string password = 3;
bool is_del = 4;
}
// -- 添加管理员
message CreateAdminRequest {
string email = 1;
string password = 2;
}
message CreateAdminReply { int32 id = 1; }
// -- 管理员列表
message ListAdminRequest {
optional string email = 1; // 根据EMAIL进行查找
optional bool is_del = 2; // 是否删除
}
message ListAdminReply { repeated Admin admins = 1; }
// -- 修改管理员
message EditAdminRequest {
int32 id = 1;
string email = 2;
string password = 3; // 现用密码
optional string new_password = 4; // 如果有密码,则修改密码
}
message EditAdminReply {
int32 id = 1;
bool ok = 2;
}
// -- 删除/恢复管理员
message ToggleAdminRequest { int32 id = 1; }
message ToggleAdminReply {
int32 id = 1;
bool is_del = 2;
}
// -- 管理员是否存在
message AdminExistsRequest {
oneof condition {
string email = 1;
int32 id = 2;
}
}
message AdminExistsReply { bool exists = 1; }
// -- 获取管理员
message GetAdminRequest {
message ByAuth {
string email = 1;
string password = 2;
}
message ById {
int32 id = 1;
optional bool is_del = 2;
}
oneof condition {
ById by_id = 1; // 通过ID直接获取
ByAuth by_auth = 2; // 通过登录信息获取
}
}
message GetAdminReply { optional Admin admin = 1; }
service AdminService {
// 添加管理员
rpc CreateAdmin(CreateAdminRequest) returns (CreateAdminReply);
// 管理员列表
rpc ListAdmin(ListAdminRequest) returns (ListAdminReply);
// 修改管理员
rpc EditAdmin(EditAdminRequest) returns (EditAdminReply);
// 删除/恢复管理员
rpc ToggleAdmin(ToggleAdminRequest) returns (ToggleAdminReply);
// 管理员是否存在
rpc AdminExists(AdminExistsRequest) returns (AdminExistsReply);
// 获取管理员
rpc GetAdmin(GetAdminRequest) returns (GetAdminReply);
}
本章代码位于01/数据结构与protobuf分支
