cube.js 代码集成模式

尽管cube.js 推荐基于docker 进行环境的部署,但是基于代码的启动模式也是很有用的
cube.js 提供了多种模式的方法,core以及server

core 模式

core 模式比较原始了,我们可以方便的集成web 框架(express)

  • @cubejs-backend/server-core 提供的方法
    create(options)
    参考
 
const { CubejsServerCore } = require('@cubejs-backend/server-core');
const express = require('express');
const path = require('path');
 
const expressApp = express();
 
const dbType = 'mysql';
const options = {
  dbType,
  logger: (msg, params) => {
    console.log(`${msg}: ${JSON.stringify(params)}`);
  },
  schemaPath: path.join('assets', 'schema')
};
 
const core = CubejsServerCore.create(options);
core.initApp(expressApp);

参数说明: 可以参考https://cube.dev/docs/config 比较通用的参数

server 模式

server 模式是一个已经包装好的express 应用,我们可以直接使用,简化运行

  • @cubejs-backend/server
    参考使用
 
const CubejsServer = require('@cubejs-backend/server');
 
const server = new CubejsServer();
 
server.listen().then(({ version, port }) => {
  console.log(`🚀 Cube.js server (${version}) is listening on ${port}`);
});

配置参数说明,包含了core 的以及附加以下的参数

{
  webSockets?: boolean;
  initApp?(app: express.Application): void | Promise<void>;
}

websocket 配置主要是进行实时数据的处理
initapp 主要是传递一个express 应用,可以方便扩展
比如
initApp.ts

 
import type { Application, Request, Response } from 'express';
 
export function initApp(app: Application) {
  app.get('/', (req: Request, res: Response) => {
    res.sendStatus(404);
  });
} 

index.ts

import { initApp } from './initApp';
 
const options = {};
 
// ...
 
if (process.env.NODE_ENV === 'production') {
  options.initApp = initApp;
}
 
const server = new CubejsServer(options);

健康检查

cube.js 提供了健康检查我们可以方便的进行服务情况的检测(基于容器环境)

  • 参考配置
const CubejsServer = require('@cubejs-backend/server');
const { createTerminus } = require('@godaddy/terminus');
 
const cubejsServer = new CubejsServer();
 
cubejsServer.listen().then(({ version, port, server }) => {
  console.log(`🚀 Cube.js server (${version}) is listening on ${port}`);
 
  createTerminus(server, {
    healthChecks: {
      '/ready': () => cubejsServer.testConnections()
    },
    onSignal: () => cubejsServer.close()
  });
});

参考资料

https://cube.dev/docs/@cubejs-backend-server-core
https://cube.dev/docs/@cubejs-backend-server
https://cube.dev/docs/config
https://github.com/godaddy/terminus

posted on 2021-01-24 10:55  荣锋亮  阅读(244)  评论(0编辑  收藏  举报

导航