Aller au contenu principal
Version: 3.0.0

etcd

etcd is an important basic component in the cloud native architecture, hosted by CNCF incubation. etcd can be registered as a service in discovery in microservices and Kubernetes clusters, and can also be used as a middleware for key-value storage.

Midway provides components packaged based on the etcd3 module, which provides etcd client calling capabilities.

Related Information:

Description
Available for Standard Items
Available for Serverless
Can be used for integration
contains independent main frame
Contains standalone logs

Install dependencies

$ npm i @midwayjs/etcd@3 --save

Or add the following dependencies in package.json and reinstall.

{
"dependencies": {
"@midwayjs/etcd": "^3.0.0",
//...
},
}

import component

First, import the component, import it in configuration.ts:

import { Configuration } from '@midwayjs/core';
import * as etcd from '@midwayjs/etcd';
import { join } from 'path'

@Configuration({
imports: [
//...
etcd,
],
//...
})
export class MainConfiguration {
}

Configure the default client

In most cases, we can only use the default client to complete the function.

// src/config/config.default.ts
export default {
//...
etcd: {
client: {
host: [
'127.0.0.1:2379'
]
},
},
}

Use the default client

After the configuration is complete, we can use it in the code.

import { Provide } from '@midwayjs/core';
import { ETCDService } from '@midwayjs/etcd';
import { join } from 'path';

@Provide()
export class UserService {

@Inject()
etcdService: etcdService;

async invoke() {

await this.etcdService.put('foo').value('bar');

const fooValue = await this.etcdService.get('foo').string();
console.log('foo was:', fooValue);

const allFValues = await this.etcdService.getAll().prefix('f').keys();
console.log('all our keys starting with "f":', allFValues);

await this.etcdService.delete().all();
}
}

For more APIs, please refer to the ts definition or official document.

Multiple instance configuration

// src/config/config.default.ts
export default {
//...
etcd: {
clients: {
instance1: {
{
host: [
'127.0.0.1:2379'
]
},
},
instance2: {
{
host: [
'127.0.0.1:2379'
]
},
}
}
},
}

Get multiple instances

import { Provide } from '@midwayjs/core';
import { ETCDServiceFactory } from '@midwayjs/etcd';
import { join } from 'path';

@Provide()
export class UserService {

@Inject()
etcdServiceFactory: ETCDServiceFactory;

async invoke() {
const instance1 = this.etcdServiceFactory.get('instance1');
//...

const instance2 = this.etcdServiceFactory.get('instance2');
//...
}
}

Create instance dynamically

import { Provide } from '@midwayjs/core';
import { ETCDServiceFactory } from '@midwayjs/etcd';
import { join } from 'path';

@Provide()
export class UserService {

@Inject()
etcdServiceFactory: ETCDServiceFactory;

async invoke() {
const instance3 = await this.etcdServiceFactory.createInstance({
host: [
'127.0.0.1:2379'
]
}, 'instance3');
//...
}
}