# go-gateway **Repository Path**: xmlgrg/go-gateway ## Basic Information - **Project Name**: go-gateway - **Description**: 可以动态注册被转发的服务,内置负载均衡 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-29 - **Last Updated**: 2023-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-gateway #### 介绍 可以动态注册被转发的服务,内置负载均衡 #### 软件架构 写在前面的话: 我是一个java程序员,也是一个新手golang开发者,这个是我在学完golang后写的一个项目,也用在了自己小程序的生产环境了,欢迎大家批评 一般中小型项目(单体),由于业务比较单一,不想将项目重构成分布式系统,一是减轻运维成本,二是业务量也没有达到,那这时候如果服务有比较大的流量进来就需要负载,原生nginx(未加载upstream)是不可以动态的对服务进行注册和注销的,那就需要一个可以动态注册服务并且可以负载均衡转发的网关,所以这个项目就由此而生 请求转发的走向 request -> ngixn -> gateway -> ['server1','server2','server3'] #### 使用说明 服务对外接口 为了安全,防止被恶意注册,所有接口都需要带上秘钥,秘钥可以在配置文件config.ini中配置 如果不配置 网关启动的时候会自动生成一个秘钥 接口的Header需要带上secret 服务注册接口: /register | 参数 | 类型 | 说明 | 必填 | |----------------|--------|----------------------|----| | name | string | 服务名称 | 否 | | scheme | string | 协议(http) | 是 | | host | string | 当前服务IP | 是 | | port | string | 当前服务端口 | 是 | | prefix | string | 服务前缀 | 是 | | preservePrefix | int | 是否保留前缀(1true 0false) | 是 | | healthyTime | int | 心跳检测时间(秒) | 是 | | weight | int | 权重(默认1) | 否 | | failureFactor| int | 降权因子(默认2.0) | 否 | 接口返回 success 成功 服务心跳接口: /ping | 参数 | 类型 | 说明 | 必填 | |----------------|--------|----------------------|----| | host | string | 当前服务IP | 是 | | port | string | 当前服务端口 | 是 | | prefix | string | 服务前缀 | 是 | 接口返回 success 成功 uninstance 无实例注册(如果返回这个标识则说明,当前服务没有注册,需要进行注册) #### 服务cmd命令 ./gateway -run 启动网关服务 ./gateway -ps [prefix] 会输出当前已经注册的服务的一些基本信息 [prefix] 为服务注册的前缀 输入 [a] 会输出宣布 #### 后续更新 1. 服务限流 2. 指定接口限流