当前位置: 首页 > news >正文

Go项目(用户操作微服务)

简介

  • 用户留言、收藏、修改收货地址等,统一放在用户操作微服务
  • 这里按照业务类型划分微服务
  • 表设计,三张表
    // 用户收藏
    type UserFav struct {BaseModel// 联合索引 idx_user_goods,且唯一User  int32 `gorm:"type:int;index:idx_user_goods,unique"`Goods int32 `gorm:"type:int;index:idx_user_goods,unique"`
    }
    
  • 建库生成表
  • 设计 proto 文件,生成 stub,这里没放在一起,生成三个 stub
    • 之前有多个 stub 是因为服务间调用
  • 更改配置,启动服务并注册
    • 更改 nacos 即可,config 不需要增加配置项
      type ServerConfig struct{Name string `mapstructure:"name" json:"name"`Host string `mapstructure:"host" json:"host"`Tags []string `mapstructure:"tags" json:"tags"`MysqlInfo MysqlConfig `mapstructure:"mysql" json:"mysql"`ConsulInfo ConsulConfig `mapstructure:"consul" json:"consul"`
      }
      
    • 这里 grpc 需要注册三个 handler 到 server,再注册服务到 consul,这就是多个 stub 不一样的地方

handler

  • srv 层实现,handler/
  • 贴一个接口实现吧,没什么新东西
    func (*UserOpServer) GetFavList(ctx context.Context, req *proto.UserFavRequest) (*proto.UserFavListResponse, error) {var rsp proto.UserFavListResponsevar userFavs []model.UserFavvar userFavList []*proto.UserFavResponse//查询用户的收藏记录//这里还定义了goodsId为参数,可以查询某件商品被哪些用户收藏了,此时不传userId即可result := global.DB.Where(&model.UserFav{User: req.UserId, Goods: req.GoodsId}).Find(&userFavs)rsp.Total = int32(result.RowsAffected)for _, userFav := range userFavs {userFavList = append(userFavList, &proto.UserFavResponse{UserId:  userFav.User,GoodsId: userFav.Goods,})}rsp.Data = userFavListreturn &rsp, nil
    }
    

web

  • API 层实现,api/
  • 要调用多个 srv 层,把 stub 拿过来
  • 定义 form 表单,接收 POST 参数;更改 nacos 配置,启动,注册
  • 没什么特殊的地方,有个 TODO
    • 收藏商品时,应该先去判断这个商品是否存在
  • 没啥好说的,看代码

小结

  • 准备前后端联调,接口打通,为多机部署做准备
http://www.lryc.cn/news/35710.html

相关文章:

  • Spring Boot统一功能处理
  • ETCD多次出现CONTEXT DEADLINE EXCEEDED
  • git 提交 多人开发避免冲突
  • 求职复盘:干了四年外包出来,面试5次全挂
  • AXI总线核心解读---基于官方文档
  • 【Linux修炼】15.进程间通信
  • 每天一道大厂SQL题【Day15】微众银行真题实战(五)
  • 如何优化查询大数据量的表
  • 卷麻了,00后Jmeter用的比我还熟练,简直没脸见人......
  • 力扣-树节点
  • MySQL8启动错误“Neither found #innodb_redo subdirectory, nor ib_logfile* files”
  • JVM系列——详细说明Volatile,原子性/可见性,先行发生原则
  • ArcGIS:栅格计算器的运算符和函数详解
  • spring的beanfactory与applicationContext的区别以及继承关系
  • 分享一个 hive on spark 模式下使用 HikariCP 数据库连接池造成的资源泄露问题
  • MySQL 行锁
  • 成为AI架构师的三大能力
  • 博客系统 实现 (前端 + 后端 )代码
  • C语言:如何在cmd命令窗口上玩贪吃蛇游戏
  • Flutter-自定义图标
  • 教学场景应用视频试看预览功能
  • 关于进程与进程调度
  • Redis常用命令及数据类型参数
  • (七十四)大白话深入探索多表关联的SQL语句到底是如何执行的?(2)
  • 销售使用CRM系统集成Excel的五个技巧
  • 过来人告诉你:Java学到什么程度可以找工作?
  • 【Linux】目录结构
  • 37.Java进阶之实现动态编译
  • 【Python百日进阶-Web开发-Vue3】Day549 - Vue3 商城后台 09:Veux4-01基本概念
  • GitLab 解析:为什么市场正在转向一体化 DevSecOps 平台?(附Forrester完整报告下载)