honeycomb使用|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习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

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
SQL Oracle 关系型数据库
MySQL之如何将字符串分隔为列表结果集
MySQL之如何将字符串分隔为列表结果集
737 1
|
SQL 前端开发 安全
详细介绍前后端分离必备的接口规范,包括命名规范、参数规范、错误处理规范等
详细介绍前后端分离必备的接口规范,包括命名规范、参数规范、错误处理规范等
3451 1
|
安全 Java
【Java面试】ConcurrentHashMap的key为什么不允许为null?
【Java面试】ConcurrentHashMap的key为什么不允许为null?
561 0
|
Java 开发者 Docker
五种常用的 Spring Boot 热部署方式
【2月更文挑战第5天】
3996 0
五种常用的 Spring Boot 热部署方式
|
2月前
|
Shell Android开发 Python
微信多开脚本,微信双开器脚本插件,autojs开源代码分享
AutoJS脚本实现安卓端微信多开,通过无障碍服务 Python脚本提供跨平台解决方案,自动检测微信安装路径
|
存储 Kubernetes 调度
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
4867 1
|
缓存 网络协议 Linux
20个基于DPDL开源项目,带你冲破内核瓶颈(中)
20个基于DPDL开源项目,带你冲破内核瓶颈(中)
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
|
测试技术 SDN 数据安全/隐私保护
使用OpenDaylight界面下发流表(上)
使用OpenDaylight界面下发流表(上)
332 0
|
SQL druid Java
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
6724 0