连接 NATS
可复用的 NATS Listener
- Listener 响应目前我们还只是 console.log
subscription.on("message", (msg: Message) => {
const data = msg.getData();
if (typeof data === "string") {
console.log(`Received event #${
msg.getSequence()}, with data: ${
data}`);
}
msg.ack();
});
- 有很多样式和配置来 publish/receive 我们的 event 信息
- 所以我们想重新写一个通用的 NATS Listener 抽象类 来重构 NATS Listener,实现定制化 publish/receive,并处理之后的操作
⬆ back to top
Listener 的 Abstract Class
![在这里插入图片描述](https://img-blog.csdnimg.cn/47dd9d1288364703ba34072e114761e1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZeoU2lyaXVz,size_20,color_FFFFFF,t_70,g_se,x_16)
abstract class Listener {
abstract subject: string;
abstract queueGroupName: string;
abstract onMessage(data: any, msg: Message): void;
private client: Stan;
protected ackWait = 5 * 1000;
constructor(client: Stan) {
this.client = client;
}
subscriptionOptions() {
return this.client
.subscriptionOptions()
.setDeliverAllAvailable()
.setManualAckMode(true)
.setAckWait(this.ackWait)
.setDurableName(this.queueGroupName);
}
listen() {
const subscription = this.client.subscribe(
this.subject,
this.queueGroupName,
this.subscriptionOptions()
)
subscription.on('message', (msg: Message) => {
console.log(`Message received: ${
this.subject} / ${
this.queueGroupName}`);
const parsedData = this.parseMessage(msg);
this.onMessage(parsedData