From cc7dca1ea96ab617b24c082380ad372fa605582b Mon Sep 17 00:00:00 2001 From: hujiebin Date: Wed, 8 Feb 2023 16:47:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0rpc=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=EF=BC=8Cmarkdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++++++++++ rpc/const.go | 13 ++++++ rpc/http.go | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 README.md create mode 100644 rpc/const.go create mode 100644 rpc/http.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..d62cbf8 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# hilo公共代码 + +# 项目架构 + ++ 目录说明 + + mycontext: 上下文 + + mylogrus: 日志包 + + resource: 资源层 + + config: 配置相关 + + consul: 注册中心 + + mysql: 数据库 + + redisCli: 缓存 + + domain: 领域层 + + ctx.go: 定义ctxAndDb + + model.go: 通用model + + event.go: 抽象定义event + + rpc: rpc请求 + + const.go: 常量 + + http.go: 封装http相关 + + utils: 工具包 + + script: 临时脚本 diff --git a/rpc/const.go b/rpc/const.go new file mode 100644 index 0000000..9ccac40 --- /dev/null +++ b/rpc/const.go @@ -0,0 +1,13 @@ +package rpc + +import "time" + +const ( + defaultMaxIdleConnsPerHost = 100 + defaultMaxIdleConns = 100 + defaultDialTimeout = 10 * time.Second + defaultKeepAliveTimeout = 30 * time.Second + defaultIdleConnTimeout = 90 * time.Second + defaultTLSHandshakeTimeout = 10 * time.Second + defaultExpectContinueTimeout = 1 * time.Second +) diff --git a/rpc/http.go b/rpc/http.go new file mode 100644 index 0000000..5407630 --- /dev/null +++ b/rpc/http.go @@ -0,0 +1,116 @@ +package rpc + +import ( + "git.hilo.cn/hilo-common/domain" + "io/ioutil" + "net" + "net/http" + "net/url" + "strings" +) + +var httpTransport = &http.Transport{ + MaxIdleConnsPerHost: defaultMaxIdleConnsPerHost, + MaxIdleConns: defaultMaxIdleConns, + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: defaultDialTimeout, + KeepAlive: defaultKeepAliveTimeout, + }).DialContext, + IdleConnTimeout: defaultIdleConnTimeout, + TLSHandshakeTimeout: defaultTLSHandshakeTimeout, + ExpectContinueTimeout: defaultExpectContinueTimeout, +} + +// 执行http get请求 +// param: header + postForm +// return: resp body,err +func HttpGet(model *domain.Model, _url string, header map[string]string, query map[string][]string) ([]byte, error) { + var err error + defer func() { + if err != nil { + model.Log.Errorf("HttpPut err:%v", err) + } + }() + if len(query) > 0 { + q := url.Values{} + for k, v := range query { + for _, v2 := range v { + q.Add(k, v2) + } + } + _url += "?" + q.Encode() + } + req, err := http.NewRequest("GET", _url, nil) + if err != nil { + return nil, err + } + for k, v := range header { + req.Header.Add(k, v) + } + resp, err := httpTransport.RoundTrip(req) + if err != nil { + return nil, err + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + if resp != nil { + err = resp.Body.Close() + } + return body, err +} + +// 执行http post请求 +// 默认: Content-Type":"application/x-www-form-urlencoded" +// param: header + postForm +// return: resp body,err +func HttpPostForm(model *domain.Model, _url string, header, form map[string]string) ([]byte, error) { + return httpForm(model, "POST", _url, header, form) +} + +// 执行http put请求 +// 默认: Content-Type":"application/x-www-form-urlencoded" +// param: header + postForm +// return: resp body,err +func HttpPutForm(model *domain.Model, _url string, header map[string]string, form map[string]string) ([]byte, error) { + return httpForm(model, "PUT", _url, header, form) +} + +// 默认: Content-Type":"application/x-www-form-urlencoded" +// param: header + postForm +// return: resp body,err +func httpForm(model *domain.Model, method, _url string, header map[string]string, form map[string]string) ([]byte, error) { + var err error + defer func() { + if err != nil { + model.Log.Errorf("HttpPut err:%v", err) + } + }() + postForm := url.Values{} + for k, v := range form { + postForm.Set(k, v) + } + payload := strings.NewReader(postForm.Encode()) + req, err := http.NewRequest(method, _url, payload) + req.Header.Add("Content-Type", "application/x-www-form-urlencoded") + if err != nil { + return nil, err + } + for k, v := range header { + req.Header.Add(k, v) + } + resp, err := httpTransport.RoundTrip(req) + if err != nil { + return nil, err + } + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + if resp != nil { + err = resp.Body.Close() + } + return body, err +} -- 2.22.0