honeycomb使用|学习笔记

简介: 快速学习honeycomb使用

开发者学堂课程【阿里云城市数据大脑开发规范honeycomb使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/534/detail/7163


honeycomb使用


内容介绍:

1. 快速入门

2. 运行维护

3. conflg机制

4. Controller机制

5. middleware机制

典型研发场景示例


一.快速入门

1.准备工作

Honeycomb命令行工具为本地开发提供模拟环境,先安装honeycomb-cli

npmi-ghoneycomb-cli

2. 从模板工程初始化工程

(1)Honeycomb命令提供模板应用的功能,可以快速搭建demo-app

如:honeycomb init $appName

# $tpl样板工程目前支持simple、console、jquery

# 也可以查看【框架模板定制】章节来自定义模板

honeycomb init -t $tpl $appName

# 如果私有npm库有scope也支持,$scope: @scope

honeycomb init -t $tpl -s $scope $appName --registry $npmregistry

(2)上述命令将初始化一个简单honeycomb app模板工程,结构如下:

appRoot/

- bin     #工具目录

-config/  #配置目录

-index.js

-config_default.js

-config_test.js

-config_production.js

-assets/#前端代码目录

- package.json

- controller       #控制器目录

- model          #模型目录

-middleware      #中间件目录

-common or lib   # utihs类的代码

-view             #模板层代码

- Makefile         #build 脚本

-.gitignore

-.eslintrc.json

-README.md

- router.js       #路由配置文件,提供特殊路由定制

-auto router.js   #扫描controller自动生成的路由配置

注:

1.可在controller这层提供一些后端服务接口。

2.View这层里会有一些模板。

3.Makefile这层没有意外的话,不要多做调整。

(3)注意package.json配置

模板工程中,根目录下的package.json必须配置的几个字段:

{

"name":"appName",//应用名,必须有

"version":"e.0.1",//版本号,必须有,遵循semver

"build":"1", // build number,可选,根据自己的版本规划

"main":"app.js", //应用的主入口,如果不提供,会寻址到index.js

}

(4)自定义模板工程

honeycomb init $tpl默认从npm仓库里寻找hc-boilerplate-$tpl的包如果是带scpoe的则为:

@scope/hc-boilerplate-$tpl所以自定义模板工程很简单:

发布一个样板库的包:npmpublish hc-boilerplate-$mytpl

honeycomb-init-t mytpl

注:

可以参考官方的模板工程:

https://github.com/node-honeycomb/hc-boilerplate

3.调试APP

(1)编写完以上case,使用honeycomb-cli来启动本地调试:

>cd $app_root

> honeycomb start

(2)启动之后,可通过浏览器来测试服务。

(3)默认controller下有几个测试控制器,可以编辑调试。

(4)前端代码,默认样板库使用webpack来管理前段代码,默认入口文件为assets/index.js。

3. 打包APP

(1)Honeycomb-cil提供了打包命令

>cd $appDir

> honeycomb package

(2)打包动作执行完之后,会在$appDirout下生成应用包(tgz包),其命名规则为(由package的规则决定):

${package.name}_${version}_${build}.tgz

(3)深入理解打包机制

honeycomb package命令执行的时候,会调用本地Makefile中的 make release 命令。

4. 发布APP


二.运行维护

1.

image.png

在控制台上,可以完成集群巡查、应用上下线、系统监控、配置管理、日志查询、集群管理。

2.集群应用管理

image.png

3.配置管理

控制台可以完成系统和应用的配置,在有权限的情况下,可以查看和提交配置。

4.日志查看

通常排查一个应用的问题,先看应用的日志,然后再看nodejs_stdout.log。

5.集群管理

通常新创建的机器,接入控制台的第一步就是创建集群:

image.png

配置集群注意:

所有的honeycomb-server都可以作为endpoint提供管控服务,管控命令先发送到endpoint然后在群发给集群的所有机器,endpoint格式一般为:http://ip:9999,

如server config.admin.port更改了端口,则保持端口和配置一致。

默认的管控token比较简单,console会检测提示安全问题,请及时更改token。

ip列表,每行一个,确保是该集群的机器IP。


三.conflg机制

1.hc-bee的配置在工程目录config/中:

config/

index.js#config 逻辑代码,组装配置文件用,具体的配置信息不要编写在这个文件

config_default.js#默认环境配置

config_test.js#测试环境配置

config production.js#线上环境配置。打包之后默认是这个配置

同时honeycomb-server在app运行时会提供一份运行环境中的配置,该配置有两部分组成:

服务器上所有app的公共配置:【serversideCommonAppConfig】,在[honeycomb-console >配置管理>common]中可以管理

服务器上各app的私有配置:【serversidePrivateAppConfig】,在[honeycomb-console>配置管理>$appName]中可以管理

2. hc-bee conflg配置项详解:

{

设置app的监听端口

如未设置,则app监听server的proxy配置的默认端口(proxy默认为8080如需要监听特定端口,请配置该参数

如需监听多个端口,请配置为数组,例如:[8080,8081]

如需指定监听的网卡,请设置为带ip格式,例如:'192.168.1.1:8080

"port":"",

设置app的域名,如果app需要绑定多个域名,则可以是一个数组

"serverName":"",

*配置URL前缀,prefix作为应用访问的地址前缀

true:使用/$name 来做prefix,$name 为package.json中的name false 使用/来做prefix string 则表示自定义prefix"prefix":"",/**

*针对honeycomb-server的配置指令*/

"honeycomb":{/**

* nginx模式下,server段的配置参数,一般用来配置ssl、上传body的buffer_size

*nginx模式下,server段的配置参数,一般用来配置ssl、上传body的buffer_size

server对应nginx的server段,该对象所有的key即为nginx指令名,值即为指令值

location对应nginx的location段,该对象所有的key即为nginx指令名,值即为指令值*/

"serverParam":{

"server": {},"location": {}

}

*服务器响应超时时间设置,毫秒*/

"serverTimeout":1000,

进程退出时等待serv.close()的超时时间*/

"waitForExit":10000,

"wrapResponseJson": function(err, data,rid){

//定制json格式的接口,返回格式,return的对象将交给res.json()处理 return {};},

配置日志文件,默认只有sys一个日志,

可以定制自己的日志文件,如下:log=log.get('sys')获取到指定的日志通道

"logs": {"sys":{

"level":"DEBUG",

"file":"${serverRoot}/logs/${appName}/sys.%year%-%month%-%day%.log"

是否dump出运行时的config,一般调试时用

"dumpConfig": false

配置middleware列表

"middleware":{ //配置应用挂载的中间件

"name": { // 中间件名字

"enable": true, // 中间件的开关。

"module":"$module_name" // 中间件的依赖包。

"config":{} // 中间件的配置,由中间件内部逻辑控制。

"router": [] // 中间件的挂载路由,默认挂载到所有路由上。

}

}

配置extension列表

extension":{ //提供使用的插件

"appClient": {

"enable": true, // 插件的开关。

"module": '$module_name', //插件的依赖包。 STRING,此项必须放应用中!

"config": {} //间件配置,由中间件内部逻辑控制。

}

}

}


四. Controller机制

1. 路由定义语法

/**

@api {get} /api/user/:id@name User.getUser* @desc

* @params* id

* @query

limit {Number} maxRow in result* sortBy {string} sort field

*

* @body:json

user {object}D+的用户对象

* name {String}

id {Number}*/

exports.hello = function (reg,callback){

};

2. async语法

/**

*支持 async await 方法

* @api {put} /hello_async*/

exports.hello =async function(req){

return data;}

exports.hello = async function(req, res, next){ res.json(data);

}

3. Express原始语法

/**

express 原生风格@api {get)/hello@nowrap

exports .hello m function (req, res, next){

}

/**

* wraper 之后的风格,简化书写方式* @api {post} /hello_wrap*/

exports.hellowraped =function(reg,callback){

// json 返回形式

callback(null, data);// html 返回形式 callback(null,{

tpl:'index.html' // 指向 view 目录下的tpl文件,支持ejs语法

data: data //注入模板中的变量

});

//支持特殊配置信息,如果wrap形态无法满足需求,可以通过原生的方式写 callback(null, data, options);};

4. generator语法

/**

支持 generator 方法

exports.helloGen =function *(req){

return data;

return new Error('xxxx');};

exports.helloGen = function *(req, res, next){

};


五. middleware机制

1.配置

{

middleware:{

csrf:{

enable: true,

module:'../middleware/lib/csrf.js' router: '/', config:{

}

}

}

}

2.排序

默认的middleware排续顺序是根据conflg.middleware里的顺序来加载的。

框架本身所提供的排序方法:

const App =require("hc-bee'); const app=newApp();/**

* 接受一个数组参数,根据给定数组的顺序挂载middleware,*注意:排序之后,框架只加载排序列表中给出的middleware**/

app.sortMiddleware([

'middleware1',*middleware2',"middleware3'

]

);


六. 典型研发场景示例

image.png


image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Java 应用服务中间件 数据库
RocketBot 的使用 | 学习笔记
快速学习 RocketBot 的使用
363 0
RocketBot 的使用 | 学习笔记
|
开发者
需要、欲望、需求 | 学习笔记
快速学习需要、欲望、需求。
127 0
需要、欲望、需求 | 学习笔记
|
XML SQL 机器学习/深度学习
M-PEG7 | 学习笔记
快速学习 M-PEG7,介绍了 M-PEG7系统机制, 以及在实际应用过程中如何使用。
89 0
M-PEG7 | 学习笔记
|
Kubernetes Cloud Native Linux
K8S 初识_K8S 初识 | 学习笔记
快速学习 K8S 初识_K8S 初识
97 0
K8S 初识_K8S 初识 | 学习笔记
|
开发工具
超详细的vimtutor学习笔记(上)
第一讲 编辑 1.1 移动光标 使用 h、j、k、l 键可以使光标实现左、下、上、右的移动。 也可以使用 ↑ ↓ ← → 进行上下左右的移动。
96 0
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
56 0
|
人工智能 开发者
一点一世界 | 学习笔记
快速学习一点一世界
69 0
一点一世界 | 学习笔记
|
开发者
SearchType 详解 | 学习笔记
快速学习 SearchType 详解
91 0
|
存储 开发者 Python
练习4|学习笔记
快速学习练习4
79 0
|
开发者 Python
In 和 not in 的使用 | 学习笔记
快速学习 In 和 not in 的使用
106 0