goland下tarsgo使用protobuf开发

Posted cnlihao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了goland下tarsgo使用protobuf开发相关的知识,希望对你有一定的参考价值。

下面开始进入tarsgo正式的开发、使用与上传步骤。
在我们完成goland下tarsgo使用protobuf开发第一部分后,我们得到如下目录:
技术图片
我们知道,helloworld.proto是protobuf的接口描述文件。通过tarsrpc插件生成的go接口文件被我们放到了proto/helloworld这个文件夹中。
之后,随着项目的开发,接口文件会越变越多,所有的接口文件都会放置在proto这个文件夹中,做一个简单分类。

众所周知,作为rpc的服务端,不仅需要生成接口文件,同时还需要实现这个接口方法。
在helloworld.proto中,只有一个简单的rpc方法。

service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

我们需要实现它,才能供给客户端调用。

在《goland下tarsgo使用protobuf开发(一)》中,我们将实现他的方法简单的放在了pdServer.go这个文件中。

package main

import (
	"github.com/TarsCloud/TarsGo/tars"
	"protoTest/proto/helloworld"
)
#定义部分
type GreeterImp  struct {
}
#实现部分
func (imp *GreeterImp) SayHello(input helloworld.HelloRequest)(output helloworld.HelloReply, err error) {
	output.Message = "hello" +  input.GetName()
	return output, nil
}

func main() { //Init servant

	imp := new(GreeterImp)                                    //New Imp
	app := new(helloworld.Greeter)                            //New init the A JCE
	cfg := tars.GetServerConfig()                              //Get Config File Object
	app.AddServant(imp, cfg.App+"."+cfg.Server+".GreeterTestObj") //Register Servant
	tars.Run()
}

但是,如果项目接口比较多,我们就要以功能层次的方式划分出几个模块。

我们要新建个Imp目录,用于存放我们实现代码。实现部分的代码就分离到Imp这个目录了。
现在的目录变成这个样子:

技术图片

实现接口的部分:
技术图片

下一步,我们需要建立服务的配置和适配器文件和sh启动脚本文件
配置和适配器文件pdServer.conf

<tars>
        <application>
                <server>
                        app=StressTest
                        server=protoTest
                        local=tcp -h 127.0.0.1 -p 10014 -t 30000
			logpath=/tmp
                        <StressTest.protoTest.GreeterTestObjAdapter>
                                allow
                                endpoint=tcp -h 127.0.0.1 -p 10015 -t 60000
                                handlegroup=StressTest.protoTest.GreeterTestObjAdapter
                                maxconns=200000
                                protocol=taf
                                queuecap=10000
                                queuetimeout=60000
                                servant=StressTest.protoTest.GreeterTestObj
                                shmcap=0
                                shmkey=0
                                threads=1
                        </StressTest.protoTest.GreeterTestObjAdapter>
                </server>
        </application>
</tars>

服务配置说明:
具体请参考:
https://github.com/tensorchen/TarsGo/blob/code_style/README.zh.md
然后,我们创建makefile文件

APP       := StressTest
TARGET    := protoTest
MFLAGS    :=
DFLAGS    :=
STRIP_FLAG:= N
J2GO_FLAG:=
libpath=${subst :, ,$(GOPATH)}
$(warning  $(GOPATH))
$(foreach path,$(libpath),$(eval -include $(path)/pkg/mod/github.com/!tars!cloud/!tars!go@v1.1.2/tars/makefile.tars.gomod))

下一步,创建开始的脚本文件start.sh

#!/bin/bash
make
./protoTest --config=pdServer.conf

注释:我们项目名称为protoTest,go build .生成的执行程序为protoTest。所以,脚本中需要指定为protoTest

现在整个项目目录:
技术图片

至此,我们小项目已经构建完毕,开始生成可执行文件。
一般我们本地开发是windows系统,而生产环境为linux系统,所以我们要编译出linux可执行文件。

set GOARCH=amd64
set GOOS=linux 
go build .

最后,我们打包上传。
windows想要支持make,需要下载make程序,所以我们直接使用docker
技术图片

配置好docker镜像,我们进入镜像,输入编译
技术图片

make && make tar

生成压缩包,然后上传

以上是关于goland下tarsgo使用protobuf开发的主要内容,如果未能解决你的问题,请参考以下文章

TarsGo新版本发布,支持protobuf,zipkin和自定义插件

TarsGo新版本发布,支持protobuf,zipkin和自定义插件

Tars | 第6篇 基于TarsGo Subset路由规则的Java JDK实现方式(下)#yyds干货盘点#

使用goland进行go开发

使用goland进行go开发

如何使用GoLand调试beego项目