# BaseService/gateway v1.3 处理搜索导致程序占用内存高搜索不出来问题 `BaseService/gateway` 剑鱼网关服务。为剑鱼网站商品标准化,提供统一权限校验,资源扣减。 ## 网关配置 ## ## 服务注册与服务发现 服务注册与发现依赖`go.etcd.io/etcd/client/v3`库。 > 服务注册 注册时向etcd中put `scheme/serverCode@serverAddr` key并设置租期 - `scheme` 默认为 `etcd:///com.gateway` - `serverCode` 为服务code,在系统中需要唯一 - `serverAddr` 为服务ip+端口 服务注册[例子](https://bp.jydev.jianyu360.cn/BaseService/gateway/src/master/core/node/hellowrold/main.go) 。服务已注册,但服务不可用可能有以下操作*造成。但服务有重试机制,并常识可用节点,不会造成影响。 ```go server := g.Server() // 向网关注册表注册服务。*此步骤应在服务启动后注册 // NewNode可传入etcd节点,默认http://127.0.0.1:2379 closeNotify, err := node.NewNode(etcdNode1,etcdNode2...).Register(serverCode, serverPort) if err != nil { panic(err) } go func() { server.Run() }() // 阻塞主进程,接受退出消息。关闭服务,从注册表中删除。 // kill -9 信号接受不到,*会有2~3秒延迟。 quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit closeNotify() ``` >服务发现 服务发现是网关程序依赖`etcd`中`watch`监听系统`scheme`中所有的服务节点。当有服务启动或关闭时,网关程序能够实时进行服务节点的增加与删除。 ```go //创建节点发现,并持续监听 watchNode := node.NewNode(etcdNode1,etcdNodes2,..) go watchNode.NewWatcher(ctx, resolver) ```