发布 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

- 将 nats-client 独立出来

⬆ back to top
回顾 mongoose 的实现


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'
);
...
}
⬆ back to top
访问 NATS Cli