golang python rpc_golang 自己实现Rpc调用客户端

package components

import (

"bytes"

"encoding/json"

"errors"

"fmt"

"github.com/astaxie/beego/config"

"io"

"io/ioutil"

"net/http"

)

var (

defaultRpcConf config.Configer

)

type RpcResponse struct {

Id string `json:"id"`

Code string `json:"code"`

Message string `json:"message"`

Type string `json:"type"`

Payload interface{} `json:"payload"`

}

//发起远程调用

//TODO 鉴权可以在这里进行

func Request(url string, data io.Reader, payload* interface{}) (*RpcResponse, error) {

req,err := http.NewRequest("POST", url, data)

req.Header.Set("Content-Type", "application/json")

resp, err := http.DefaultClient.Do(req)

if err != nil {

return nil, err

}

body, err := ioutil.ReadAll(resp.Body)

if err != nil {

return nil, err

}

str := string(body[:])

fmt.Print(str)

v := RpcResponse{Payload: payload}

json.Unmarshal(body, &v)

return &v,nil

}

func Rpc(name string, data interface{}, payload interface{}) (*RpcResponse, error) {

url := defaultRpcConf.String("urls::test")

requestJson, err := json.Marshal(data)

if err != nil {

return nil, err

}

p, e := Request(url, bytes.NewReader(requestJson), &payload)

if e != nil {

return nil, e

}

return p, nil

}

//rpc 简单调用方法

func RpcWithPayload(name string, data interface{}, payload interface{}) error {

p, e := Rpc(name, data, payload)

if e != nil {

return e

}

//检查rpc返回状态码

if p.Code != "0" {

return errors.New("error code: " + p.Code + " Message: " + p.Message)

}

return nil

}

func init() {

conf, err := config.NewConfig("ini", "../conf/rpc.conf")

if err != nil {

panic(err)

}

defaultRpcConf = conf

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值