20210520第三天
一、DCache 使用
taf 管理平台初始化
- DCache 模块 => 服务创建 => 创建模块
选择应用和填写模块名称(模块名称以应用名称开头)
填写数据结构及DB信息
选择 Cache 服务 IP,输入 DbAccess Mysql 实例信息
确认信息建库,确认安装。 - 服务管理 => 发布管理
发布 DBAccess
使用
安装
$ npm install @taf/taf-dcache-helper
初始化和调用
const DCache = require("@taf/taf-dcache-helper");
const TafStream = require("@taf/taf-stream");
const cacheHelper = new DCache({
DCacheServerTarget: "DCache.TestProxyServer.ProxyObj@tcp -h 172.16.8.147 -t 60000 -p 28711",
moduleName: "TestHelloDcacheDemo"
});
/**
* 设置key-value
* @param keyItem, key的值
* @param value, 要设置的数据
* @param ver,数据版本(1)
* @param dirty,是否脏数据
* @param expireTimeSecond,设置数据过期的绝对时间,以秒为单位。CacheServer将根据这个时间自动淘汰过期数据。如果数据没有过期的概念,请将此参数设为0
* @return int, 返回码
*/
cacheHelper.setStringEx('fixed_key_ex2', 'fixed_value_ex2', 1, true, 600).then(function(ret) {
if (ret.iRet === 0) {
console.log('setStringEx success', ret);
} else {
console.log('setStringEx error', ret);
}
}, function(ret) {
console.log('setStringEx error', ret);
}).done();
/**
* 根据key查询value
* @param keyItem, key的值
* @param value, 查询结构,返回数据
*/
cacheHelper.getStringWithVer('fixed_key').then(function(ret) {
if (ret.iRet === 0) {
const val = ret.data.value;
const ver = ret.data.ver;
console.log('getStringWithVer success', val, ver);
} else {
console.log('getStringWithVer error', ret);
}
}, function(ret) {
console.log('getStringWithVer error', ret);
}).done();
二、构建 taf 服务
安装依赖
npm install @taf/taf-rpc
npm install nodemon -D
- 编写 jce 文件( jce 的模块名即为应用名)
通过在服务器上的命令或者脚手架的命令生成 xxx.js 以及 xxxImp.js 文件供服务端使用 和 xxxProxy.js 文件供客户端使用。其中 Imp 结尾的文件是实现接口的文件。在项目中有用于开启服务 server.js 文件和 用于客户端的 client.js 文件。
// server.js
const TAF = require('@taf/taf-rpc');
const LXSC = require('./HelloImp').LXSC;
const server = new TAF.server();
server.initialize(process.env.TAF_CONFIG || './local.conf', function (server) {
const servantName = server.Application + '.' + server.ServerName + '.HelloObj';
console.log(servantName);
server.addServant(LXSC.HelloImp, servantName);
});
server.start();
// client.js
const TAF = require('@taf/taf-rpc').Communicator.New();
const LXSC = require('./HelloProxy').LXSC;
let servant = 'LXSC.HelloServer.HelloObj';
if (!process.env.TAF_CONFIG) {
servant += '@tcp -h 127.0.0.1 -p 14001 -t 60000';
}
const prx = TAF.stringToProxy(LXSC.HelloProxy, servant);
const stReq = new LXSC.HelloWorldReq();
stReq.readFromObject(
{
data: 'Hello World',
}
);
prx.helloWorld(stReq).then(function (ret) {
console.log('### helloWorld ok ###', ret.response.arguments.stRsp.toObject());
}, function (ret) {
console.log('### helloWorld error ###', ret.response);
});
// imp.js
var LXSC = require('./Hello.js').LXSC;
module.exports.LXSC = LXSC;
LXSC.HelloImp.prototype.helloWorld = function (current, stReq, stRsp) {
const req = stReq.toObject();
stRsp.readFromObject({
iRet: 0,
message: req.data,
});
current.sendResponse(0, stRsp);
}
- 打包发布服务。
三、Gitlab-CI
Gitlab-CI 是一款用于持续集成、持续交付的工具。
CI 即持续集成,当提交代码后自动检测、构建和进行单元测试的过程,目标是保证代码是稳妥的,可以运行。
CD 即持续交付,整个流程链(管道)自动检测源代码的改变,并通过构建、测试、打包和相关操作运行他们以生成可部署的版本。
Gitlab-CI 的 CI/CD 相对比较简单,在文件的根目录有一个 .gitlab-ci.yml 文件,随着文件的提交,gitlab 会进行执行该文件,从而实现 CI/CD。
- 如何使用 gitlab 的 gitlab-ci:
在公司的 gitlab 下的 CI/CD 模块,使用自带的Runner 来开启。 - .gitlab-ci.yml 文件的写法
关键字 | 含义 |
---|---|
before_script和after_script | before_script关键字定义了一组在每个任务开始之前需要执行的命令,after_script则相反。 |
stages | 指定一系列 JOB(任务) 执行的顺序,如果两个任务的 stages 值相同,那么这两个任务同时执行。上一个 stages 的任务成功执行之后才会执行下一个任务,否则不执行。 |
only / except | 控制任务的触发条件,他们里面包含了一些子关键字(或者叫策略),only 关键字的默认策略是[‘branches’, ‘tags’],即你提交了一个分支或者打了标签,就会触发。 |
tags | 指定哪台机器去执行我们的任务(与上面的 only/except 不同) |
when | stages关键字可以控制每个任务的执行顺序,且后一个stage会等待前一个stage执行成功后才会执行,那如果我们想要达到前一个stage失败了,后面的stage仍然能够执行的效果可以使用 when 关键字。on_success:只有前面stages的所有工作成功时才执行,这是默认值。on_failure:当前面stages中任意一个jobs失败后执行。always:无论前面stages中jobs状态如何都执行。manual:手动执行。delayed:延迟执行 |
cache | 指定需要缓存的文件夹或者文件 |
artifacts | 与上面的缓存差不多,这个可以下载缓存后的文件。 |