Métriques du dépôt
- Stars
- (2 388 stars)
- Métriques de merge PR
- (Métriques PR en attente)
Description
Hi, I'm working on my service to graceful shutdown. How can I prevent responder to accept new requests so it could finish already got ones and then call responder.close?
I have example responder:
const cote = require('cote');
const { SHOULD_SIGTERM } = process.env;
async function main() {
const server = new cote.Responder({
name: 'rpc-server',
namespace: 'rpc-server',
key : 'rpc-server'
});
server.on('foo', async ({ type, data }) => {
const { i } = data;
if (SHOULD_SIGTERM && i === 5) {
server.close();
}
console.log('Data', i);
const result = `bar-${i}`;
console.log('Result', result);
return result;
})
}
if (require.main === module) {
main();
}
and example requester that make 10 requests:
const cote = require('cote');
async function main() {
const requester = new cote.Requester({
name: 'rpc-requester',
namespace: 'rpc-server',
key: 'rpc-server',
});
for (let i = 0; i < 10; i++) {
let result;
try {
result = await requester.send({
type: 'foo',
data: {
i,
},
__timeout: 3 * 1000
});
} catch (e) {
console.error(e);
}
console.log('Result', result);
}
requester.close();
}
if (require.main === module) {
main();
}
As I coded responder to close on request with i === 5, I lose this request. IMPORTANT NOTE: when I do NOT specify __timeout in requester, once responder is restarted this request hangs forever.
In case when I do NOT call responder.close untill all requests are processed I keep getting new requests, so it does not seems like a solution.
Thanks in advance.