本文整理汇总了TypeScript中@restorecommerce/kafka-client.Topic.emit方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Topic.emit方法的具体用法?TypeScript Topic.emit怎么用?TypeScript Topic.emit使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类@restorecommerce/kafka-client.Topic
的用法示例。
在下文中一共展示了Topic.emit方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: testConsumeListener
async function testConsumeListener() {
this.timeout(4000);
// emit testMessage to kafka
topic = await events.topic(topicName);
await topic.emit(eventName, testMessage);
// start offsetTracker subscribing to previous offset value read
// from redis and consume the above message
offsetStore = new OffsetStore(events, cfg, logger);
const listener = async function listener(message, context) {
testMessage.value.should.equal(message.value);
testMessage.count.should.equal(message.count);
};
// get the current offsetValue for 'test' topic before emitting message
let startingOffset = await offsetStore.getOffset(topicName);
await topic.on(eventName, listener, { startingOffset });
// wait for 2sec so that message is consumed and
// test is not ended immediately
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 2000);
});
});
示例2: reset
/**
* Reset system data related to a service. Default implementation truncates
* a set of ArangoDB instances, using the chassis-srv database provider.
*/
async reset(): Promise<any> {
this.logger.info('reset process started');
if (this.health.status !== ServingStatus.NOT_SERVING) {
this.logger.warn('reset process starting while server is serving');
}
let errorMsg = null;
try {
const dbCfgs = this.config.database;
const dbCfgNames = _.keys(dbCfgs);
for (let i = 0; i < dbCfgNames.length; i += 1) {
const dbCfgName = dbCfgNames[i];
const dbCfg = dbCfgs[dbCfgName];
const db = await database.get(dbCfg, this.logger);
switch (dbCfg.provider) {
case 'arango':
await db.truncate();
this.logger.info(`arangodb ${dbCfg.database} truncated`);
break;
default:
this.logger.error(
`unsupported database provider ${dbCfg.provider} in database config ${dbCfgName}`);
break;
}
}
} catch (err) {
this.logger.error('Unexpected error while resetting the system', err.message);
errorMsg = err.message;
}
const eventObject = {
services: _.keys(this.service),
payload: null
};
if (errorMsg) {
eventObject.payload = this.encodeMsg({
error: errorMsg
});
} else {
eventObject.payload = this.encodeMsg({
status: 'Reset concluded successfully'
});
}
await this.commandTopic.emit('resetResponse', eventObject);
this.logger.info('reset process ended');
if (errorMsg) {
return {
error: errorMsg
};
}
return {};
}
示例3: check
/**
* Check the service status
* @param call List of services to be checked
* @param context
*/
async check(payload: any): Promise<any> {
if (_.isNil(payload)) {
throw new errors.InvalidArgument('Invalid payload for restore command');
}
const serviceName = payload.service;
if (_.isNil(serviceName) || _.size(serviceName) === 0) {
await this.commandTopic.emit('healthCheckResponse', {
services: _.keys(this.service),
payload: this.encodeMsg({
status: this.health.status,
})
});
return {
status: this.health.status,
};
}
const service = this.service[serviceName];
if (_.isNil(service)) {
const errorMsg = 'Service ' + serviceName + ' does not exist';
this.logger.warn(errorMsg);
return {
error: errorMsg
};
}
let status = ServingStatus.UNKNOWN;
// If one transports serves the service, set it to SERVING
_.forEach(service.transport, (transportStatus) => {
if (transportStatus === ServingStatus.SERVING) {
status = transportStatus;
}
});
await this.commandTopic.emit('healthCheckResponse', {
services: [serviceName],
payload: this.encodeMsg({
status,
})
});
return {
status,
};
}
示例4: version
/**
* Retrieve current NPM package and Node version of service
*/
async version(): Promise<any> {
const response = {
nodejs: process.version,
version: process.env.npm_package_version,
};
await this.commandTopic.emit('versionResponse', {
services: _.keys(this.service),
payload: this.encodeMsg(response)
});
return response;
}
示例5: testStoredOffsetValue
async function testStoredOffsetValue() {
this.timeout(10000);
offsetStore = new OffsetStore(events, cfg, logger);
topic = await (events.topic(topicName));
const listener = function listener(message, context) {
testMessage.value.should.equal(message.value);
testMessage.count.should.equal(message.count);
};
// get the current offsetValue for 'test' topic before emitting message
const currentOffset = await topic.$offset(-1);
// emit message to kafka
await topic.on(eventName, listener);
await topic.emit(eventName, testMessage);
const newOffset = await new Promise((resolve, reject) => {
setTimeout(async () => {
const offsetValue = await offsetStore.getOffset(topicName);
resolve(offsetValue);
}, 8000);
});
should.exist(newOffset);
Number(newOffset).should.equal(currentOffset + 1);
});
示例6: restore
/**
* Restore the system by re-reading Kafka messages.
* This base implementation restores documents from a set of
* ArangoDB database collections, using the chassis-srv database provider.
* @param topics list of Kafka topics to be restored
*/
async restore(payload: any): Promise<any> {
if (_.isEmpty(payload) || _.isEmpty(payload.data)) {
throw new errors.InvalidArgument('Invalid payload for restore command');
}
const restoreData: RestoreData[] = payload.data || [];
// the Kafka config should contains a key-value pair, mapping
// a label with the topic's name
const kafkaEventsCfg = this.config.events.kafka;
const kafkaCfg = this.config.events.kafka.topics;
if (_.isNil(kafkaCfg) || kafkaCfg.length == 0) {
throw new errors.Internal('Kafka topics config not available');
}
const topicLabels = _.keys(kafkaCfg).filter((elem, index) => {
return elem.includes('.resource');
}).map((elem) => {
return elem.replace('.resource', '');
});
const restoreSetup = {};
const restoreEventSetup = {};
restoreData.forEach((data) => {
const ignoreOffset = (data.ignore_offset || []).filter((offset) => {
const isNumber = Number(offset) != NaN;
if (!isNumber) {
this.logger.warn(`Invalid value for "ignore_offset" parameter in restore: ${offset}`);
}
return isNumber;
});
restoreSetup[data.entity] = {
baseOffset: Number(data.base_offset) || 0,
ignoreOffset
};
});
const restoreCollections = _.keys(restoreSetup);
try {
const dbCfgs = this.config.database;
const dbCfgNames = _.keys(dbCfgs);
for (let i = 0; i < dbCfgNames.length; i += 1) {
const dbCfgName = dbCfgNames[i];
const dbCfg = dbCfgs[dbCfgName];
const collections = dbCfg.collections;
let graphName;
if (this.config.graph) {
graphName = this.config.graph.graphName;
}
const db = await database.get(dbCfg, this.logger, graphName);
if (_.isNil(collections)) {
this.logger.warn('No collections found on DB config');
return {};
}
let intersection: string[] = _.intersection(restoreCollections, collections);
if (intersection.length > 0) {
intersection = _.intersection(intersection, topicLabels);
for (let resource of intersection) {
const topicName = kafkaCfg[`${resource}.resource`].topic;
restoreEventSetup[topicName] = {
topic: this.kafkaEvents.topic(topicName),
events: this.makeResourcesRestoreSetup(db, resource),
baseOffset: restoreSetup[resource].baseOffset,
ignoreOffset: restoreSetup[resource].ignoreOffset
};
}
}
}
if (_.isEmpty(restoreEventSetup)) {
this.logger.warn('No data was setup for the restore process.');
} else {
const that = this;
// Start the restore process
this.logger.warn('restoring data');
for (let topicName in restoreEventSetup) {
const topicSetup: any = restoreEventSetup[topicName];
const restoreTopic: Topic = topicSetup.topic;
const topicEvents: any = topicSetup.events;
// saving listeners for potentially subscribed events on this topic,
// so they don't get called during the restore process
const previousEvents: string[] = _.cloneDeep(restoreTopic.subscribed);
const listenersBackup = new Map<string, Function[]>();
for (let event of previousEvents) {
listenersBackup.set(event, (restoreTopic.emitter as EventEmitter).listeners(event));
await restoreTopic.removeAllListeners(event);
}
//.........这里部分代码省略.........