io-syncify
Version:
跨进程、跨服务器之间通信同步化
51 lines (45 loc) • 1.53 kB
text/typescript
import {EventEmitter} from "events";
import * as IORedis from "ioredis";
import {Message} from "./Message";
import {OutputMessageReceiver} from "./OutputMessageReceiver";
/**
* Redis输出消息接收器
*/
export class RedisOutputMessageReceiver implements OutputMessageReceiver {
/**
* 事件发射器
*/
eventEmitter: EventEmitter;
/**
* 输出消息订阅通道
*/
output_message_sub_channel: string
/**
* 输出消息订阅客户端
*/
output_message_sub_client: IORedis.Redis;
/**
*
* @param {string} output_message_sub_channel
* @param {IORedis.RedisOptions} options
* @param {EventEmitter} emitter
*/
constructor(output_message_sub_channel: string, options: IORedis.RedisOptions, emitter: EventEmitter) {
this.output_message_sub_channel = output_message_sub_channel;
this.output_message_sub_client = new IORedis(options);
this.eventEmitter = emitter;
}
/**
* 接收消息
*/
receive() {
this.output_message_sub_client.subscribe(this.output_message_sub_channel).then(()=>{
// console.log('subscribe', this.output_message_sub_channel, 'success');
this.output_message_sub_client.on('message', async (channel, message) => {
// console.log(Date.now(), 'receive output message', message);
let msg = Message.fromJsonArrayString(message);
this.eventEmitter.emit(msg.id, msg);
});
});
}
}