dashersw/cote

Prevent responder from getting new requests

Open

#228 创建于 2020年9月18日

在 GitHub 查看
 (5 评论) (1 反应) (0 负责人)JavaScript (184 fork)github user discovery
enhancementhelp wanted

仓库指标

Star
 (2,388 star)
PR 合并指标
 (PR 指标待抓取)

描述

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.

贡献者指南