微服务grpc通讯 案例 nest 版
这个周末整理分类了自己写过的一些微服务模块,这里分享一个 使用nest搭建微服务的真实项目案例(已删减掉复杂的业务), 订单模块的微服务
数据库:mysql
语言:typescript
通讯协议:grpc
这里主要有6个文件
order-module.proto //grpc 通讯对外承诺的消息结构体,即协议文件
order.grpc.controller.ts //控制器
order.service.ts //服务层
order.entity.ts //实体
main.ts // 微服务启动入口
module.order.ts //nest 的模块内,集成 控制器,服务
order.grpc.controller.ts
proto对应的函数名,会自动映射到 控制器上
import {
Controller, Inject } from '@nestjs/common';
import {
GrpcMethod } from '@nestjs/microservices';
import {
OrderService } from '../services/order.service';
import {
OrderInput,SearchInput } from '../interfaces/order.interface';
@Controller()
export class OrderGrpcController {
constructor(
@Inject(OrderService) private readonly orderService: OrderService
) {
}
@GrpcMethod('OrderService')
async Hello(payload: {
name: string}) {
const data = await this.orderService.hello(payload.name);
return {
value:data };
}
@GrpcMethod('OrderService')
async add(payload: {
orderInput: OrderInput }) {
const data = await this.orderService.add(payload.orderInput);
return {
code: 1000, message: '创建成功' ,id: data.id};
}
@GrpcMethod('OrderService')
async update(payload: {
id:number, orderInput: OrderInput }) {
await this.orderService.update(payload.id, payload.orderInput);
return {
code: 1000, message: '更新成功'};
}
@GrpcMethod('OrderService')
async updateByOutTradeNo(payload: {
outTradeNo:string, orderInput: OrderInput }) {
await this.orderService.updateByOutTradeNo(payload.outTradeNo, payload.orderInput);
return {
code: 1000, message: '更新成功'};
}
@GrpcMethod('OrderService')
async findById(payload: {
id:number }) {
let data = await this.orderService.findById(payload.id);
return {
code: 1000, message: '查找成功', orderInfo:data};
}
@GrpcMethod('OrderService')
async findByUserId(payload: {
userId:string}) {
let datas = await this.orderService.findByUserId(payload.userId);
return {
code: 1000, message: '查找成功',orderInfos:datas };
}
@GrpcMethod('OrderService')
async findByParam(payload: {
searchInput:SearchInput}) {
let datas = await