01 2020 档案
摘要:json.Unmarshal不区分json字段 的大小写,只要字母一样即可,不区分大小写 可以看到sEx也被解析了,agde没有被解析,所以大小写不影响反序列化,但是结构体序列化成json的时候大小写必须和tag一致 来自为知笔记(Wiz)
阅读全文
摘要:go定时任务三方包,这个直接拉的版本和文档里的版本是不一样的,要去github看文档,每个版本的使用方法是不一样的,我们这里使用下面的命令去拉取3.0.0版本的查看 go get github.com/robfig/cron/v3@v3.0.0 package Jobs import ( "encoding/json" "log" "sz1/AppInit" "s...
阅读全文
摘要:什么时候创建组合索引? 当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引 为什么不对每一列创建索引 减少开销 覆盖索引 效率高 减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(col1)、(col1,col2)、(col1,col2,col3)3个索引 覆盖索引:假如查询SELECT col1, col2, col3 FROM 表名...
阅读全文
摘要:mysql对同样一次查询会将结果放入queryCache中,在mysql8.0这个功能已经被砍掉了,适合不经常变动的表,因为经常更新,缓存就是失效,如果经常更新设置了缓存会影响性能,如果是以查询为主的表,可以设置一下 上图最后两项是设置缓存,1表示开启 Qcache_hits表示缓存命中数量,下图中插入了一个缓存,有5999条查询都走了这条缓存,没有直接去查询数据库 来自为知笔记...
阅读全文
摘要:当请求查询语句很简单,返回速度很快时,应该把最大连接数设置小一点,哪怕请求数量很多,因为返回很快,但是多开的连接反而占用了太多服务器资源,得不偿失来自为知笔记(Wiz)
阅读全文
摘要:这里映射到docker容器后,会报错权限问题,因为我们设置的日志权限不对,可以查看日志文件在docker容器内部的属主拿到属主的用户id,再查找我们宿主机的属主对应容器内部属主id的用户,把文件属主改成该用户,再次映射就解决问题 [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [m...
阅读全文
摘要:1.gin里面的中间件如果出错,不可以直接return,这样会把错误消息返回给客户端,应该使用ctx.Abort()方法,才会中断业务代码运行 2.gin结合go-micro的具体步骤是 服务端:创建proto文件,生成对应的pb文件,根据proto编写的规则编写service的具体实现逻辑,启动micro服务并注册到etcd或者consul中,使用micro api添加网关,或者使用第三方工...
阅读全文
摘要:首先理一下思路,使用代码去注册其他api到go-micro体系中,我们就需要在代码中模拟出这样的json数据,并发送给我们的micro Registry服务 { "jsonrpc": "2.0", "method": "Registry.Deregister", "params": [{ "name": "api.jtthink.com.test", ...
阅读全文
摘要:执行完上面的代码看输出我们可以发现,打开了一个8000端口并监听了它,并且把注册服务的这个服务(micro registry)开启的服务本身注册到了etcd中去 开启micro web,可以看到我们开启的这个注册服务的详情 上面的图我们可以看到如果我们想要通过这个registry服务注册服务到etcd中去,我们需要调用它的Registry.Register方法,它规定了通过发送...
阅读全文
摘要:验证数组 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:"用户名...
阅读全文
摘要:首先重新改造一下我们之前的自定义错误处理函数 package AppLib import ( "fmt" "gopkg.in/go-playground/validator.v9" "reflect" "regexp" ) //封装一个通用的正则方法,省去每次都要写下面这段很长的代码 func AddRegexTag(tagName string, patte...
阅读全文
摘要:编写一个简单的例子来理解一下validator验证器 package main import ( "fmt" "gopkg.in/go-playground/validator.v9" "micro/AppLib" ) type Users struct { Username string `validate:"required"` Userpwd...
阅读全文
摘要:编写数据库初始化函数 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...
阅读全文
摘要:编写Models.proto syntax = "proto3"; package services; import "google/protobuf/timestamp.proto"; //使用第三方proto支持时间类型的参数 message UserModel { int32 user_id = 1; string user_name = 2; string ...
阅读全文
摘要:使用Postman去点对点调用我们之前写的service,header中设置Content-type是application/json,发送如下图的json数据即可。json指定了jsonrpc,指定了调用的endpoint 启动grpc server package main import (v "github.com/micro/go-micro" "github...
阅读全文
摘要:首先创建grpc服务原来是micro.NewService还支持http等其他访问方式,但是grpc.NewService这种方法只支持grpc访问,所以需要创建网关让其支持http访问 package main import ( "github.com/micro/go-micro" "github.com/micro/go-micro/registry" "gith...
阅读全文
摘要:因为新版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" ...
阅读全文
摘要:如果熔断器只设置timeout参数,那么只是解决了报错后服务怎么处理的问题,但是每次请求都会两秒,但是如果请求的服务一直很慢,那么每次至少要等待timeout的时间才会调用降级方法返回结果,这是相当慢的,所以我们可以设置其他参数,让熔断器在服务请求超时或失败一定次数后,以后接受到请求直接走降级方法,这样就提高了响应的速度 代码如下 package Wrappers import ( ...
阅读全文
摘要:很多时候我们一个service有很多响应类型,当请求超时或者失败的时候熔断器会调用降级服务,并返回值,但是我们熔断器一个service只定义了一次,所以具体应该返回哪个类型的response我们不知道,所以可以使用下面的通用方法来解决这个问题 package Wrappers import ( "context" "github.com/afex/hystrix-go/hyst...
阅读全文
摘要:首先定义proto文件 syntax = "proto3"; package Services; import "Models.proto"; message ProdsRequest { // @inject_tag: json:"size" form:"size" int32 size = 1; // @inject_tag: uri:"pid" int32 ...
阅读全文
摘要:使用go-micro的装饰器整合熔断器 package Wrappers import ( "context" "github.com/afex/hystrix-go/hystrix" "github.com/micro/go-micro/client" "go-micro/Services" "strconv" ) type ProdsWrapper...
阅读全文
摘要:使用熔断器降级,商品查询出错,降级使用系统推荐的商品 package Weblib import ( "github.com/afex/hystrix-go/hystrix" "github.com/gin-gonic/gin" "go-micro/Services" "strconv" ) func newProd(id int32, pname strin...
阅读全文
摘要:现在rpc服务端设置3秒延迟模拟 package ServiceImpl import ( "context" "go-micro-grpc/Services" "strconv" "time" ) type ProdService struct { } func (*ProdService) GetProdsList(ctx context.Con...
阅读全文
摘要:使用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" "...
阅读全文
摘要:封装gin的router package Weblib import ( "github.com/gin-gonic/gin" "go-micro/Services" ) func NewGinRouter(prodService Services.ProdService) *gin.Engine { ginRouter := gin.Default() gi...
阅读全文