Juno 调用

如何使用

  1. 启动juno(可以通过-p 指定端口 默认端口为50001)
  2. 在conf.toml中将juno地址填写到GrpcAddr参数内(默认127.0.0.1:50001)
  3. 进行调试

TIP

juno与Yearning 必须共用同一个数据库且共用同一份配置文件(如juno与Yearning不在同一台主机,则需拷贝一份cofnig.toml文件与juno放在同级目录。且Yearning项目内的config.toml文件中RpcAddr配置项填写为juno所在主机的ip及端口)

由于当前juno仅只有linux版本,建议基于mac/windows平台开发的开发者使用docker启动juno。

调用方法

juno 采用原生net/rpc 库进行通信,主要提供以下方法

  1. Check (SQL语句检测)
  2. MergeAlterTables (多条DDL语句合并)
  3. Exec (SQL语句执行)
  4. Query (SQL查询)

RPC初始化代码

1. // Yearning/src/lib/rpc.go
2. func NewRpc() *rpc.Client {
3. client, err := rpc.DialHTTP("tcp", model.C.General.RpcAddr)
4. if err != nil {
5. log.Println(err)
6. }
7. return client
8. }
1. // SQL检测调用
2. // Yearning/src/handler/fetch/fetch.go 204
3. var rs []engine.Record
4. client.Call("Engine.Check", engine.CheckArgs{
5. SQL:      u.SQL,
6. Schema:   u.Database,
7. IP:       s.IP,
8. Username: s.Username,
9. Port:     s.Port,
10. Password: lib.Decrypt(s.Password),
11. Kind:     u.Kind,
12. Lang:     "zh-cn",
13. Rule:     model.GloRole,
14. }, &rs)
1. // SQL执行调用
2. // Yearning/src/handler/order/audit/impl.go 70
3. var isCall bool
4. client.Call("Engine.Exec", &ExecArgs{
5. Order:    &order,
6. Rules:    model.GloRole,
7. IP:       source.IP,
8. Port:     source.Port,
9. Username: source.Username,
10. Password: lib.Decrypt(source.Password),
11. Message:  model.GloMessage,
12. }, &isCall
1. // SQL查询调用
2. // Yearning/src/handler/personal/impl.go 65
3. var rs []engine.Record
4. client.Call("Engine.Query", &QueryArgs{
5. SQL:              q.Ref.Sql,
6. Limit:            model.GloOther.Limit,
7. InsulateWordList: insulateWordList,
8. }, &rs)