随笔分类 -  Go micro

摘要:1.gin里面的中间件如果出错,不可以直接return,这样会把错误消息返回给客户端,应该使用ctx.Abort()方法,才会中断业务代码运行 2.gin结合go-micro的具体步骤是 服务端:创建proto文件,生成对应的pb文件,根据proto编写的规则编写service的具体实现逻辑,启动micro服务并注册到etcd或者consul中,使用micro api添加网关,或者使用第三方工... 阅读全文
posted @ 2020-01-03 21:33 离地最远的星 阅读(275) 评论(0) 推荐(0) 编辑
摘要:首先理一下思路,使用代码去注册其他api到go-micro体系中,我们就需要在代码中模拟出这样的json数据,并发送给我们的micro Registry服务 { "jsonrpc": "2.0", "method": "Registry.Deregister", "params": [{ "name": "api.jtthink.com.test", ... 阅读全文
posted @ 2020-01-03 20:50 离地最远的星 阅读(463) 评论(0) 推荐(0) 编辑
摘要:执行完上面的代码看输出我们可以发现,打开了一个8000端口并监听了它,并且把注册服务的这个服务(micro registry)开启的服务本身注册到了etcd中去 开启micro web,可以看到我们开启的这个注册服务的详情 上面的图我们可以看到如果我们想要通过这个registry服务注册服务到etcd中去,我们需要调用它的Registry.Register方法,它规定了通过发送... 阅读全文
posted @ 2020-01-03 19:01 离地最远的星 阅读(380) 评论(0) 推荐(0) 编辑
摘要:验证数组 package main import ( "fmt" "gopkg.in/go-playground/validator.v9" "log" "micro/AppLib" ) type Users struct { Username string `validate:"required,min=6,max=20" vmsg:"用户名... 阅读全文
posted @ 2020-01-03 16:23 离地最远的星 阅读(355) 评论(0) 推荐(0) 编辑
摘要:首先重新改造一下我们之前的自定义错误处理函数 package AppLib import ( "fmt" "gopkg.in/go-playground/validator.v9" "reflect" "regexp" ) //封装一个通用的正则方法,省去每次都要写下面这段很长的代码 func AddRegexTag(tagName string, patte... 阅读全文
posted @ 2020-01-03 15:46 离地最远的星 阅读(380) 评论(0) 推荐(0) 编辑
摘要:编写一个简单的例子来理解一下validator验证器 package main import ( "fmt" "gopkg.in/go-playground/validator.v9" "micro/AppLib" ) type Users struct { Username string `validate:"required"` Userpwd... 阅读全文
posted @ 2020-01-03 14:16 离地最远的星 阅读(384) 评论(0) 推荐(0) 编辑
摘要:编写数据库初始化函数 package AppInit import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "log" ) var db *gorm.DB func init() { var err error db, err = gorm.Open("m... 阅读全文
posted @ 2020-01-03 13:48 离地最远的星 阅读(657) 评论(0) 推荐(0) 编辑
摘要:编写Models.proto syntax = "proto3"; package services; import "google/protobuf/timestamp.proto"; //使用第三方proto支持时间类型的参数 message UserModel { int32 user_id = 1; string user_name = 2; string ... 阅读全文
posted @ 2020-01-03 00:43 离地最远的星 阅读(244) 评论(0) 推荐(0) 编辑
摘要:使用Postman去点对点调用我们之前写的service,header中设置Content-type是application/json,发送如下图的json数据即可。json指定了jsonrpc,指定了调用的endpoint 启动grpc server package main import (v "github.com/micro/go-micro" "github... 阅读全文
posted @ 2020-01-02 22:14 离地最远的星 阅读(1279) 评论(0) 推荐(0) 编辑
摘要:首先创建grpc服务原来是micro.NewService还支持http等其他访问方式,但是grpc.NewService这种方法只支持grpc访问,所以需要创建网关让其支持http访问 package main import ( "github.com/micro/go-micro" "github.com/micro/go-micro/registry" "gith... 阅读全文
posted @ 2020-01-02 21:37 离地最远的星 阅读(1347) 评论(0) 推荐(0) 编辑
摘要:因为新版Micro工具已经弃用了consul,加入了etcd的支持,所以我们把服务注册放入到etcd中 package main import ( "github.com/micro/go-micro" "github.com/micro/go-micro/registry" "github.com/micro/go-micro/registry/etcd" ... 阅读全文
posted @ 2020-01-02 19:44 离地最远的星 阅读(735) 评论(0) 推荐(0) 编辑
摘要:如果熔断器只设置timeout参数,那么只是解决了报错后服务怎么处理的问题,但是每次请求都会两秒,但是如果请求的服务一直很慢,那么每次至少要等待timeout的时间才会调用降级方法返回结果,这是相当慢的,所以我们可以设置其他参数,让熔断器在服务请求超时或失败一定次数后,以后接受到请求直接走降级方法,这样就提高了响应的速度 代码如下 package Wrappers import ( ... 阅读全文
posted @ 2020-01-02 16:32 离地最远的星 阅读(770) 评论(0) 推荐(0) 编辑
摘要:很多时候我们一个service有很多响应类型,当请求超时或者失败的时候熔断器会调用降级服务,并返回值,但是我们熔断器一个service只定义了一次,所以具体应该返回哪个类型的response我们不知道,所以可以使用下面的通用方法来解决这个问题 package Wrappers import ( "context" "github.com/afex/hystrix-go/hyst... 阅读全文
posted @ 2020-01-02 16:13 离地最远的星 阅读(390) 评论(0) 推荐(0) 编辑
摘要:首先定义proto文件 syntax = "proto3"; package Services; import "Models.proto"; message ProdsRequest { // @inject_tag: json:"size" form:"size" int32 size = 1; // @inject_tag: uri:"pid" int32 ... 阅读全文
posted @ 2020-01-02 15:51 离地最远的星 阅读(553) 评论(0) 推荐(0) 编辑
摘要:使用go-micro的装饰器整合熔断器 package Wrappers import ( "context" "github.com/afex/hystrix-go/hystrix" "github.com/micro/go-micro/client" "go-micro/Services" "strconv" ) type ProdsWrapper... 阅读全文
posted @ 2020-01-02 13:41 离地最远的星 阅读(906) 评论(0) 推荐(0) 编辑
摘要:使用熔断器降级,商品查询出错,降级使用系统推荐的商品 package Weblib import ( "github.com/afex/hystrix-go/hystrix" "github.com/gin-gonic/gin" "go-micro/Services" "strconv" ) func newProd(id int32, pname strin... 阅读全文
posted @ 2020-01-02 12:09 离地最远的星 阅读(673) 评论(0) 推荐(0) 编辑
摘要:现在rpc服务端设置3秒延迟模拟 package ServiceImpl import ( "context" "go-micro-grpc/Services" "strconv" "time" ) type ProdService struct { } func (*ProdService) GetProdsList(ctx context.Con... 阅读全文
posted @ 2020-01-02 10:56 离地最远的星 阅读(822) 评论(0) 推荐(0) 编辑
摘要:使用go-micro官方提供的wrapper来对路由进行装饰 package main import ( "context" "fmt" "github.com/micro/go-micro" "github.com/micro/go-micro/client" "github.com/micro/go-micro/registry" "... 阅读全文
posted @ 2020-01-01 23:10 离地最远的星 阅读(1809) 评论(0) 推荐(0) 编辑
摘要:封装gin的router package Weblib import ( "github.com/gin-gonic/gin" "go-micro/Services" ) func NewGinRouter(prodService Services.ProdService) *gin.Engine { ginRouter := gin.Default() gi... 阅读全文
posted @ 2020-01-01 22:14 离地最远的星 阅读(1413) 评论(0) 推荐(0) 编辑
摘要:编写Models.proto syntax = "proto3"; package Services; message ProdModel { // @inject_tag: json:"pid" int32 ProdID = 1; // @inject_tag: json:"pname" string ProdName = 2; } 编写ProdServ... 阅读全文
posted @ 2019-12-26 20:44 离地最远的星 阅读(553) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示