micro.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package quickstart
  2. import (
  3. _ "embed"
  4. "os"
  5. "path/filepath"
  6. "github.com/wuntsong-org/go-zero-plus/core/logx"
  7. "github.com/wuntsong-org/go-zero-plus/core/service"
  8. "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/pathx"
  9. )
  10. const protoName = "greet.proto"
  11. var (
  12. //go:embed idl/greet.proto
  13. protocContent string
  14. //go:embed idl/rpc.yaml
  15. rpcEtcContent string
  16. zrpcWorkDir string
  17. )
  18. type serviceImpl struct {
  19. starter func()
  20. }
  21. func (s serviceImpl) Start() {
  22. s.starter()
  23. }
  24. func (s serviceImpl) Stop() {}
  25. func initRPCProto() error {
  26. zrpcWorkDir = filepath.Join(projectDir, "rpc")
  27. if err := pathx.MkdirIfNotExist(zrpcWorkDir); err != nil {
  28. return err
  29. }
  30. protoFilename := filepath.Join(zrpcWorkDir, protoName)
  31. rpcBytes := []byte(protocContent)
  32. return os.WriteFile(protoFilename, rpcBytes, 0o666)
  33. }
  34. type micro struct{}
  35. func newMicroService() micro {
  36. m := micro{}
  37. m.mustStartRPCProject()
  38. return m
  39. }
  40. func (m micro) mustStartRPCProject() {
  41. logx.Must(initRPCProto())
  42. log.Debug(">> Generating quickstart zRPC project...")
  43. arg := "goctlwt rpc protoc " + protoName + " --go_out=. --go-grpc_out=. --zrpc_out=. --verbose"
  44. execCommand(zrpcWorkDir, arg)
  45. etcFile := filepath.Join(zrpcWorkDir, "etc", "greet.yaml")
  46. logx.Must(os.WriteFile(etcFile, []byte(rpcEtcContent), 0o666))
  47. }
  48. func (m micro) start() {
  49. mono := newMonoService(true)
  50. goModTidy(projectDir)
  51. sg := service.NewServiceGroup()
  52. sg.Add(serviceImpl{func() {
  53. log.Debug(">> Ready to start a zRPC server...")
  54. goStart(zrpcWorkDir)
  55. }})
  56. sg.Add(serviceImpl{func() {
  57. mono.start()
  58. }})
  59. sg.Start()
  60. }