zrpc

package module
v0.0.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2022 License: Apache-2.0 Imports: 6 Imported by: 0

README

zrpc

介绍

针对golang微服务实现构建RPC框架,基于TCP协议完成。

  • 首发版本为v0.0.4,原因在之前的三次gitee发布中均以失败告终。
  • 使用zrpc框架你无需关注服务的构建方式,只需要关注服务的定义和调用
  • 当前版本v0.0.8(稳定版本),中间版本增加了服务注册和默认退出的方法
软件架构

软件架构说明

安装教程
    go get gitee.com/zuokuan/zrpc

获取最新版本

使用说明


以下为v0.0.8版本内容(稳定版本)

1、创建服务

var AddFunction = server.NewFunction().SetArgs(
	po.NewArg(_const.Float64, "args1", "被加数"),
	po.NewArg(_const.Float64, "args2", "加数"),
).Action(
	func(request zrpc.CallRequest, result *zrpc.CallResult) error {
		args1, _ := request.GetFloat64(0)
		args2, _ := request.GetFloat64(1)
		result.Success(map[string]interface{}{
			"sum": args1 + args2,
		})
		return nil
	},
)
var functions = server.FunctionBuilder().
	Add("Add", AddFunction)

var test = server.NewSimplePlugin(functions)

func main() {

	err := server.Run(28002, test)
	if err != nil {
		fmt.Println(err)
	}
}

注册到服务中心,后续发出来服务中心的代码。

import (
	"fmt"
	"gitee.com/zuokuan/zrpc"
	_const "gitee.com/zuokuan/zrpc/const"
	"gitee.com/zuokuan/zrpc/po"
	"gitee.com/zuokuan/zrpc/server"
)

var AddFunction22 = server.
	NewFunctionForApi("Add", "加法", "两个参数的加法").
	SetArgs(
		po.NewArg(_const.Float64, "args1", "被加数"),
		po.NewArg(_const.Float64, "args2", "加数"),
	).Action(
	func(request zrpc.CallRequest, result *zrpc.CallResult) error {
		args1, _ := request.GetFloat64(0)
		args2, _ := request.GetFloat64(1)
		result.Success(map[string]interface{}{
			"sum": args1 + args2,
		})
		return nil
	},
)

var testApi = server.NewApiPlugin(
	"Email", "邮件服务", 22001, AddFunction22)

func main() {
	err := server.RunForApi(22000, testApi)
	if err != nil {
		fmt.Println(err)
	}
}

2、客户端

func main() {
	newClient, err := client.NewClient(28001)
	if err != nil {
		log.Fatal(err)
	}
	callRequest := client.NewCallRequest("Add", 100)
	data := Data{}
	call, msg := newClient.TransCall(callRequest, &data)
	if !call {
		fmt.Println(msg)
	}
	fmt.Println(data)

}
以下为v0.0.4版本内容

  1. 创建服务
package main

import (
	"fmt"
	"gitee.com/zuokuan/zrpc"
	_const "gitee.com/zuokuan/zrpc/const"
	"gitee.com/zuokuan/zrpc/po"
	"gitee.com/zuokuan/zrpc/server"
)

var AddFunction = server.NewFunction().SetArgs(
	po.NewArg(_const.INT,"args1","被加数"),
	po.NewArg(_const.INT,"args2","加数"),
).Action(
	func(request zrpc.CallRequest, result *zrpc.CallResult) error {
		args1, _ := request.GetInt(0)
		args2, _ := request.GetInt(1)
		result.Success(map[string]interface{}{
			"sum": args1 + args2,
		})
		return nil
	},
)

var test = server.NewPlugin(
	server.FunctionBuilder().
		Add("Add", AddFunction),
)

func main() {
	err := server.Run(28001, test)
	if err != nil {
		fmt.Println(err)
	}
}
  1. 客户端调用
package main

import (
	"fmt"
	"gitee.com/zuokuan/zrpc/client"
	"log"
)

type Data struct {
	Sum int `json:"sum"`
}

func main() {
	newClient, err := client.NewClient(28001)
	if err != nil {
		log.Fatal(err)
	}
	callRequest := client.NewCallRequest("Add", 100, 200)
	data := Data{}
	newClient.TransCall(callRequest, &data)
	fmt.Println(data)

}

参与贡献

Documentation

Index

Constants

This section is empty.

Variables

View Source
var NewPluginFunction = func(FunctionName, FunctionNameDesc, FunctionDesc string) *PluginFunction {
	return &PluginFunction{
		functionInfo: po.Function{
			FunctionName:     FunctionName,
			FunctionNameDesc: FunctionNameDesc,
			FunctionDesc:     FunctionDesc,
		},
	}
}

Functions

This section is empty.

Types

type Action

type Action func(request CallRequest, result *CallResult) error

Action 事件

type CallRequest

type CallRequest struct {
	FuncName string        `json:"func_name"`
	Args     []interface{} `json:"args"`
	// contains filtered or unexported fields
}

CallRequest 异步调用请求

func (*CallRequest) GetBool

func (c *CallRequest) GetBool(index int) (b bool, err error)

func (*CallRequest) GetFloat64 added in v0.0.7

func (c *CallRequest) GetFloat64(index int) (i float64, err error)

func (*CallRequest) GetInt

func (c *CallRequest) GetInt(index int) (i int, err error)

func (*CallRequest) GetString

func (c *CallRequest) GetString(index int) (str string, err error)

type CallResult

type CallResult struct {
	Code string                 `json:"code"` //0 成功 1失败
	Msg  string                 `json:"msg"`  //信息
	Data map[string]interface{} `json:"data"` //结果
}

CallResult 返回值

func (*CallResult) AddData

func (cr *CallResult) AddData(key string, value interface{})

func (*CallResult) Error

func (cr *CallResult) Error(msg string, arg ...string)

func (*CallResult) Result

func (cr *CallResult) Result() (data map[string]interface{}, success bool, msg string)

func (*CallResult) Success

func (cr *CallResult) Success(data map[string]interface{})

func (*CallResult) SuccessMsg added in v0.0.7

func (cr *CallResult) SuccessMsg(msg string, arg ...string)

func (*CallResult) Trans

func (cr *CallResult) Trans(v interface{}) error

type Plugin

type Plugin struct {
	AppInfo         po.AppInfo
	PluginFunctions map[string]PluginFunctionInterface
}

func (Plugin) Call

func (p Plugin) Call(request CallRequest, result *CallResult) error

type PluginFunction

type PluginFunction struct {
	// contains filtered or unexported fields
}

func (*PluginFunction) Action

func (p *PluginFunction) Action(action Action) *PluginFunction

func (PluginFunction) Info added in v0.0.6

func (p PluginFunction) Info() po.Function

func (PluginFunction) Name added in v0.0.6

func (p PluginFunction) Name() string

func (*PluginFunction) SetArgs

func (p *PluginFunction) SetArgs(args ...po.Arg) *PluginFunction

type PluginFunctionInterface

type PluginFunctionInterface interface {
	Name() string
	Info() po.Function
	// contains filtered or unexported methods
}

PluginFunctionInterface 插件方法接口

type PluginInterface

type PluginInterface interface {
	Call(request CallRequest, result *CallResult) error
}

PluginInterface 插件接口

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL