24 Star 34 Fork 10

Beta版厨子3.0® / go-moa

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

MOA Server

简介

* 基于zk做地址发现
* 基于redis的get、ping、info协议构建协议通讯
* 使用json序列化协议满足良好跨语言兼容性
* 使用当前众多语言的redisclient即可以完成客户端开发。

使用样例

样例参考

Redis协议简介

  • 可以使用redis-cli -h -p get/ping/info 命令访问服务或发起服务调用

  • Get

exp:

  get {"action":"/service/bibi/go-moa","params":{"m":"setName","args":["a"]}}
  
  action:理解为服务名称(service-uri)
  
  m:需要调用该服务的方法名称(已经做了go和java关于方法名首字母大写兼容)
  
  args:m方法的调用参数序列。
  • PING

    同 Redis的PING返回PONG

  • INFO

    同 Redis的INFO,返回MOA和网络状态(json数据moa与network节点)。

    exp:

    {"moa":{"recv":0,"proc":0,"error":0},"network":{"read_count":1,"read_bytes":9,"write_count":0,"write_bytes":0,"dispatcher_go":1,"connections":1}}

安装:

安装ZooKeeper $Zookeeper/bin/zkServer.sh start

```
go get  github.com/blackbeans/go-moa/core
go get  github.com/blackbeans/go-moa/proxy
```
  • 定义服务的接口对应
  • 例如接口为:

        //接口
        type DemoResult struct {
            Hosts []string `json:"hosts"`
            Uri   string   `json:"uri"`
        }
        
        type IGoMoaDemo interface {
            GetDemoName(serviceUri, proto string) (DemoResult, error)
        }
        //服务实现
        type GoMoaDemo struct {
        }
        
        func (self GoMoaDemo) GetDemoName(serviceUri, proto string) (   DemoResult, error)      {
            return DemoResult{[]string{"fuck gfw"}, serviceUri}, nil
        }
     ```
  • 约定: 为了给客户端友好的返回错误信息,go-moa的服务接口最后一个返回必须为error类型。并且为了满足Java单一返回结果所以返回参数最多2个。

  • 服务端启动启动:

    ```goalng
    
       func main(){
           app := core.NewApplcation("./conf/cluster_test.toml", 
           func() []proxy.Service {
               return []proxy.Service{
                   proxy.Service{
                       ServiceUri: "/service/bibi/go-moa",
                       Instance:   GoMoaDemo{},
                       Interface:  (*IGoMoaDemo)(nil)}}
           })
       
           //设置启动项
           ch := make(chan os.Signal, 1)
           signal.Notify(ch, os.Kill)
           //kill掉的server
           <-ch
           app.DestoryApplication()
       }
  • 说明

    • Service为一个服务单元,对应了本服务对外的服务名称、以及对应的接口

    • Applcation需要对应的Moa的配置文件,toml类型,具体配置参见./conf/cluster_test. toml

  • 发布服务成功可以使用客户端进行测试,具体[客户端的使用请参考](http://github. com/blackbeans/go-moa-client/blob/master/README.md)

Benchmark

env:Macbook Pro 2.2 GHz Intel Core i7

redis-benchmark result : 53527.46 requests per second

go test --bench=".*" github.com/blackbeans/go-moa/core -run=BenchmarkApplication

BenchmarkApplication-8     20000         64517 ns/op

空文件

简介

go-moa is a rpc framework based redis "get/ping/info" protocol 展开 收起
Go
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/blackbeans/go-moa.git
git@gitee.com:blackbeans/go-moa.git
blackbeans
go-moa
go-moa
master

搜索帮助