使用hydra构建六大服务器及混合服务器

188225606 · · 717 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

构建六大服务器及混合服务器 ------------- [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra) 本示例通过最简单的代码,介绍构建6类服务器及组合服务器的方法 一、构建api server 二、构建mqc server 三、构建cron server 四、构建rpc server 五、构建ws server 六、构建web server 七、混合服务器 ### 一、构建api server 对外提供http api 服务 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/http" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(http.API), ) //注册服务 app.API("/hello", hello) app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 对外提供 http://localhost:8080/hello 服务,通过`GET、POST`等请求时返回结果为`success` [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra) ### 二、构建mqc server 监听消息队列,有新的消息时执行对应的服务 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/mqc" "github.com/micro-plat/hydra/conf/vars/queue/lmq" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(mqc.MQC), ) //注册服务 app.MQC("/hello",hello,"queue-name") //设置消息队列服务器(本地内存MQ,支持redis,mqtt等) hydra.Conf.MQC(lmq.MQ) app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 监听消息队列`queue-name`,有新消息到达时执行服务`/hello` 本示例以本地内存作为消息队列服务器(单机应用) [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra) ### 三、构建cron server 提供定时任务服务器,按周期定时执行任务 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/cron" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(cron.CRON), ) //注册服务 app.CRON("/hello",hello,"@every 5s") app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 每隔5秒执行一次"/hello"服务 ### 四、构建rpc server 提供基于json的rpc协议服务器 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/rpc" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(rpc.RPC), ) //注册服务 app.RPC("/hello",hello) app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 对外提供基于RPC协议的服务,可通过hydra.C.RPC().Request组件进行调用 ### 五、构建ws server 提供web socket 服务器 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/http" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(http.WS), ) //注册服务 app.WS("/hello",hello) app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 对外提供`/ws`服务,外部可通过json方式请求服务`/hello` [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra) ### 六、构建web server 提供静态文件服务 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/http" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(http.WEB), ) //配置静态文件 hydra.Conf.WEB.Static(static.WithArchive("./static.zip")) //系统自动解压static.zip自动路由到包中对应的文件 //注册服务 app.WEB("/hello",hello) app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 外部可访问`static.zip`中包含的所有静态文件和`/hello`服务 以上6种类型服务器都以服务注册的方式将服务实现对象注册到服务器,并以相同的方式启动即可使用。 ### 七、混合服务器 同一个程序中包含多个服务器 ```go package main import ( "github.com/micro-plat/hydra" "github.com/micro-plat/hydra/hydra/servers/http" "github.com/micro-plat/hydra/hydra/servers/cron" ) func main() { app := hydra.NewApp( hydra.WithServerTypes(http.API,cron.CRON), ) app.API("/hello",hello) app.CRON("/hello",hello,"@every 5s") app.Start() } func hello(ctx hydra.IContext) interface{} { return "success" } ``` 以编译后的二进制文件`flowserver`为例: ```sh $ ./flowserver run --plat test ``` [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra) 日志如下: ```sh [2020/07/08 09:36:31.140432][i][29f63e41d]初始化: /test/flowserver/api-cron/1.0.0/conf [2020/07/08 09:36:31.143027][i][29f63e41d]启动[api]服务... [2020/07/08 09:36:31.643524][i][b65655312]启动成功(api,http://192.168.4.121:8080,1) [2020/07/08 09:36:31.643885][i][29f63e41d]启动[cron]服务... [2020/07/08 09:36:31.844844][i][3908a5ccc]启动成功(cron,cron://192.168.4.121,1) [2020/07/08 09:36:32.346047][d][3908a5ccc]this cron server is started as master [2020/07/08 09:36:36.648149][i][01751ece6]cron.request: GET /hello from 192.168.4.121 [2020/07/08 09:36:36.648244][i][01751ece6]cron.response: GET /hello 200 193.356µs [2020/07/08 09:36:41.651858][i][00f45e17b]cron.request: GET /hello from 192.168.4.121 [2020/07/08 09:36:41.651911][i][00f45e17b]cron.response: GET /hello 200 159.694µs ``` 服务已经启动,cron server也开始按周期(每隔5秒执行一次服务`/hello`)执行任务 [github.com/micro-plat/hydra](https://github.com/micro-plat/hydra)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

717 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传