范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

基于知名微服务框架gomicro开发gRPC应用程序

  go-micro是golang的一个微服务框架。
  go-micro各个版本之间的兼容性问题一直被诟病,前几年go-micro更是分化出了两个分支:
  一个延续了go-micro,只不过转到了其公司CEO的个人Github仓库中,访问地址:
  asim/go-micro: A Go microservices framework (github.com)
  一个转向了云原生方向,名字叫Micro,访问地址:
  micro/micro: API first cloud platform (github.com)
  不过都还是开源的,当前的许可证都是Apache 2.0,不是某些人说的不能商用了,当然无法保证以后不会改许可证。
  回到正文,这篇文章将介绍使用go-micro最新版本v4开发gRPC服务的方式。1、安装protoc
  这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码。
  下载地址:https://github.com/protocolbuffers/protobuf/releases
  一般下载最新版本就行,注意要符合自己当前的操作系统。
  解压后里边有个 protoc.exe ,拷贝到 GOPATH 的 bin 目录下,我这里就是 C:/Users/PC-001/go/bin ,PC-001 是登录当前操作系统的用户名,需要换成你自己的。GOPATH 可以通过执行 go env 查看到。
  一般都是把 GOPATH 的 bin 目录添加到环境变量的 PATH 变量中,如果没有,请自行添加上。2、安装protoc的go-micro插件
  需要安装两个插件,它们用来生成 Golang 版本的 proto 协议代码和 go-micro 的 gRPC 代理代码。
  执行如下命令,会在 GOPATH 的 bin 目录下生成两个可执行文件:protoc-gen-go.exe 和 protoc-gen-micro.exe。go install google.golang.org/protobuf/cmd/protoc-gen-go go install go-micro.dev/v4/cmd/protoc-gen-micro@v4 3、编写proto文件
  proto文件是符合Protocol Buffers语言规范的数据交换协议文件,就像以前WebService定义服务时使用的XML文件。现在一般都是用proto3了,这里创建一个名为 hello.proto 的文件,放到项目的proto目录下:syntax = "proto3";  option go_package="/proto";  package Business;  service Hello {   rpc Say (SayRequest) returns (SayResponse); }  message SayResponse {   string Message = 1; }  message SayRequest {   string Name = 1; }
  这个协议很简单,有个名字为Hello的服务,提供一个名字为Say的rpc方法,这个方法有输入输出,输入信息中有一个名为Name的参数,输出信息中有一个名为Message的返回值。4、生成gRPC代理代码
  在项目根目录中执行如下命令,会在proto目录下生成两个文件:hello.pb.go 和 hello.pb.micro.go。protoc --go_out=. --go_opt=paths=source_relative --micro_out=. --micro_opt=paths=source_relative proto/hello.proto
  hello.pb.go 中是输入输出数据类型的Golang定义,hello.pb.micro.go 中是go-micro客户端和服务端的gRPC代理程序。
  也可以将文件生成到别的目录中,比如修改 proto 文件中 go_package 的配置为:option go_package="/business";
  然后执行下面的命令,会生成到项目下的business目录中:protoc --go_out=.  --micro_out=. proto/hello.proto
  具体这个命令还有哪些参数,可以执行 protoc -help 去探索下,这里就不罗嗦了。5、编写gRPC服务端程序
  这里先上代码:package main  import (     "context"     "fmt"     "grpchello/proto"     "log"     "time"      "github.com/asim/go-micro/plugins/server/grpc/v4"     "go-micro.dev/v4"     "go-micro.dev/v4/server" )  type Hello struct{}  func (s *Hello) Say(ctx context.Context, req *proto.SayRequest, rsp *proto.SayResponse) error {     fmt.Println("request:", req.Name)     rsp.Message = "Hello " + req.Name     return nil }  func main() {      grpcServer := grpc.NewServer()      service := micro.NewService(         micro.Server(grpcServer),         micro.Name("grpchello.service"),         micro.Address("0.0.0.0:8001"),         micro.RegisterTTL(time.Second*30),         micro.RegisterInterval(time.Second*10),     )      // optionally setup command line usage     service.Init()      // Register Handlers     proto.RegisterHelloHandler(service.Server(), &Hello{})      // Run server     if err := service.Run(); err != nil {         log.Fatal(err)     } }
  整个过程如下:
  先定义一个名为 Hello 的类型,它去实现hello.pb.micro.go中生成的HelloHandler接口,也就是编写具体的业务实现。
  然后通过grpc.NewServer创建一个gRPC服务器,这里决定go-micro底层通信使用gPRC;
  然后通过micro.NewService创建一个micro服务,这里需要传入上面创建的grpc server,还要设置服务的名称、监听端口,以及保持服务健康用的TTL和上报周期。go-mico当前默认的服务发现机制是mdns,不用额外部署服务发现工具,不过一般只建议在开发环境使用,生产环境建议使用etcd;
  通过上面的步骤对服务进行一些初始化之后,再将Hello类型的实例注册到grpc server;
  最后启动服务,就可以开始接客了。
  如果直接粘贴这段代码的话,会有很多包没有引用进来,可以通过 go get 获取这些包,也可以执行命令:go mod tidy 来引入需要的包。
  这里边还import了一个 grpchello/proto ,这个是我这边项目的mod是 grpchello,gRPC代理程序的package是proto,如果你的不一样,需要修改下。6、编写gRPC客户端程序
  访问gRPC服务也是通过 hello.pb.micro.go 中生成的方法,直接上代码:package main  import (     "bufio"     "context"     "fmt"     "grpchello/proto"     "os"      "github.com/asim/go-micro/plugins/client/grpc/v4"     "go-micro.dev/v4" )  func main() {      service := micro.NewService(         micro.Client(grpc.NewClient()),     )      service.Init()     client := proto.NewHelloService("grpchello.service", service.Client())      rsp, err := client.Say(context.TODO(), &proto.SayRequest{Name: "BOSSMA"})     if err != nil {         fmt.Println(err)     }      fmt.Println(rsp)      fmt.Println("按回车键退出程序...")     in := bufio.NewReader(os.Stdin)     _, _, _ = in.ReadLine() }
  上面的程序使用了 grpc.NewClient , 这决定了底层通信采用gRPC;然后再使用生成的代码 proto.NewHelloService 创建客户端代理,这里指定的服务名字必须是服务端注册的名字;最后使用这个客户端代理调用相应的方法。7、运行程序
  可以使用 go run xxx.go 来编译并运行程序。这里为了方便测试,先使用 go build 将它们编译为exe,然后再双击运行。实际运行效果如下:
  以上就是本文的主要内容了,完整代码示例已经上传到 Github:https://github.com/bosima/go-demo/tree/main/go-micro-grpc-hello

给程序员的低代码平台为什么必须死?编辑导读低代码平台分为两种,一种是面向业务人员的,一种是面向程序员的。这两个流派面向不同的群体,产品形态也不同。本文作者认为,低代码平台并不能解决程序员的效率问题。一起来文中看看吧当了5年Java程序员,难道还说不清个static的用途吗?当了5年的Java程序员,难道还说不清个static的用途吗?你能全说出来吗?static用在哪里?下面我为大家提供一个速记的方式,包你记得牢牢的。首先我们先把一个Java类中所能防跳楼抑郁秘术学会放下腾讯90后程序员跳楼身亡腾讯知名游戏程序员跳楼身亡。等等,就这样一个IT大神走了不到30岁,抑郁了!!!!!!!!!!!真的非常痛心!!!!!!!!!!!!!这种事情,每年都有,IT行业压力大每天像机器一微信积分商城小程序怎么搭建?微信小程序可以说是现阶段比较热门的项目之一,之所以这么热门是因为强大的客户管理能力,解决很多线下商家维护老客户的问题,其中不得不说的就是积分商城小程序了,如果在小程序中加入一些积分iPhone通话声音太小,如何解决?(此处已添加小程序,请到今日头条客户端查看)拨打和接听电话是手机的基础功能之一,如果在使用iPhone时,经常感觉对方声音小,或者是对方听不清您的声音,可以参考如下方法尝试检查和解特朗普媒体公司称已筹10亿美元,美媒借壳融资,金融监管机构介入调查在遭到主流社交媒体平台全面封杀后,美国前总统特朗普致力于打造属于自己的社交媒体平台,旨在与硅谷巨头分庭抗礼。近日,以海湖庄园为总部的特朗普传媒与技术集团(TMTG)声称已获得10亿距离盈利,B站还差几步?文新眸,作者阮雪,编辑桑明强每逢财报季,B站总要被讨论盈利难题。这个季度也不例外,先看一组数据根据哔哩哔哩今年Q3财报,净亏损为16。13亿元,净亏损率达30。98。事实上,这并不新加坡也不要!华人新首富无处容身?今年7月初,新加坡金融管理局(MAS)曾表示,将对币安控股(BinanceHoldings)在新加坡的子公司进行审查。如今半年过去,12月13日,币安亚洲服务有限公司(Binanc小米MIX4和,小米11Pro怎么选?首发新骁龙8处理器的摩托罗拉edgeX30已经发布,看网上大家的测试,这一代骁龙8发热比888还猛,瞬间对搭载新骁龙8的小米12失去了耐心,反过来说,新骁龙8的翻车,会变相的让去年男男女女,不过虎扑到小红书的距离文光子星球,作者何芙蓉,编辑吴先之关于商业价值,坊间一直流传着这样一个排名,即女性儿童宠物男人,因此出现了男人的商业价值不如狗的戏谑言谈。自古,人类就处于大群居的状态,而在小红书与鹅厂公关能力有多强?碾压阿里某想!大瓜根本发不出去事情是这样的网传某讯短视频部门总监孙某斌,因制D贩D,被深圳市人民检察院提起诉讼了。从2021年4月份介入调查,再到7月15日8月24日一审,整个过程被捂的严严实实?如果是真的,那
京东图书超级品类日450个商家成交额同比增长均超1009月1日,京东图书超级品类日与开学季活动叠加,迎来开门爆红。在精选好书以及大力度优惠加持下,自营图书成交额同比增长102,图书开放平台成交额同比增长超100的商家多达450个。同时详谈电商网站建设的四大流程在21世纪的互联网时代,电商网站的建设是每个企业发展不可缺少的一次机遇。企业商城网站建设成功也许会获得更大的了利润如果网站建设不成功,那么也会带来一定的损失。所以建设电商网站不是那手机可以用多久?出现这三个问题,别犹豫,直接换掉现在的智能手机功能越来越强大,配置和性能都提升了不少,有部分中端旗舰机搭载了高端的处理器,这样看来,手机的寿命是不是也跟着高了呢?这应该是大家关注的问题,毕竟大家买一款手机少则半个月球隔地球有多远?月球隔地球有多远?我来回答题主的这个问题吧,首先,月球以每秒1。02千米的速度,在稍扁的轨道上绕地球公转。月球离地球最近时,距离363300千米,最远时达405000千米,地球到月实测百公里电耗低至11。9千瓦时,哪吒V续航测试,究竟能跑多远?前两天我翻看7月份国内新能源SUV销量榜的时候,有了意外的小发现哪吒汽车旗下的小型SUV哪吒V以4469辆的成绩高居第四位,比同级别标杆车型比亚迪元EV还要多出214辆。这着实勾起几万块的电车到底能跑多远?微型电动车续航测试在微型纯电动车市场,奇瑞小蚂蚁eQ1和五菱宏光MINIEV是两款极具代表性的车型,一个是从2017年就深耕新能源市场的老将,一个是月销量突破三万辆的国民神车。由于目前主流新能源车的腾讯的星辰大海腾讯几乎涉及互联网任何一个领域,它在将来会不会真的干掉百度和阿里巴巴很长的时间里,我们谈论各个互联网巨头们,提到搜索时是百度,电商是阿里,短视频是抖音等等,这是很长的时间里互联网巨造车新势力8月销量公布没有谁是永远的第一果然,每个月的一号,只要是已经入市并开始卖车后的造车新势力都迫不及待地公布了自己的月度销量。9月1号,正值开学季,便有5大造车新势力公布了自家8月份的累计销量,虽然总体上是呈上涨之欧界丨小米创始人雷军不再控制雷军基金会,对小米持股降至9。12欧界报道9月3日,有相关消息称,小米集团创始人董事长兼CEO雷军将不再控制雷军基金会,小米集团公司的持股比例也从10。63下降到9。12,卖出了3。08亿股。根据小米在8月31日的相互宝分摊金额暴涨400倍,人数骤减2000万!你还在继续使用么?你知道阿里巴巴公司旗下的相互宝么?一直以来,由于国内保险公司的鱼龙混杂,导致很多人一谈到保险,就会心生抵触情绪,然而阿里巴巴旗下的支付宝在2018年的时候,面向公众推出了一款全新的我国有已消失的巨型湖泊吗?只说千年以内的?这个问题当然是有的,西北的罗布泊,华北有大野泽,长江中游有云梦泽。它们消失的有自然因素也有人为因素。罗布泊在1500年前水域面积有8000多k,当时的楼兰古国就在旁边,但随着塔里木