发布 TicketCreate
import {
Publisher, Subjects, TicketCreatedEvent } from '@heysirius-common/common';
export class TicketCreatedPublisher extends Publisher<TicketCreatedEvent> {
subject: Subjects.TicketCreated = Subjects.TicketCreated;
}
await new TicketCreatedPublisher(client).publish({
id: ticket.id,
title: ticket.title,
price: ticket.price,
userId: ticket.userId,
});
⬆ back to top
将 NATS Client 独立出来
- index 进行 nats client 初始化 给 ticketCreated route
- ticketCreated 又会通过 app.ts 传递给 index
- 造成 引用 circle
![在这里插入图片描述](https://img-blog.csdnimg.cn/75987244c46f4d51940212e618e17c5b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZeoU2lyaXVz,size_20,color_FFFFFF,t_70,g_se,x_16)
- 将 nats-client 独立出来
![在这里插入图片描述](https://img-blog.csdnimg.cn/2300b866d5d94a2c8d080a20ca7418da.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZeoU2lyaXVz,size_20,color_FFFFFF,t_70,g_se,x_16)
⬆ back to top
回顾 mongoose 的实现
![在这里插入图片描述](https://img-blog.csdnimg.cn/395a835d10b94f439005a17f29455fdd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZeoU2lyaXVz,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e753c1509c849a7936c78ee9e63a30b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZeoU2lyaXVz,size_20,color_FFFFFF,t_70,g_se,x_16)
import nats, {
Stan } from 'node-nats-streaming';
class NatsWrapper {
}
export const natsWrapper = new NatsWrapper();
⬆ back to top
nats client 独立的实现
import nats, {
Stan } from 'node-nats-streaming';
class NatsWrapper {
private _client?: Stan;
connect(clusterId: string, clientId: string, url: string) {
this._client = nats.connect(clusterId, clientId, {
url });
return new Promise((resolve, reject) => {
this._client!.on('connect', () => {
console.log('Connected to NATS');
resolve();
});
this._client!.on('error', (err) => {
reject(err);
});
});
}
}
export const natsWrapper = new NatsWrapper();
try {
await natsWrapper.connect(
'ticketing',
'dhghad',
'http://nats-srv:4222'
);
...