kafka-node — передать аргументы асинхронной функции Consumer.on();

Я использую kafka-node для своего сервера node.js — для подключения к темам kafka. . В их API есть функция обратного вызова:

consumer.on('message', function (message) {
     console.log(message);
});

для потребления сообщений, когда они прибыли.

Интересно, могу ли я добавить аргумент в эту функцию обратного вызова, и как это сделать, поскольку я не тот, кто вызывает ее, когда приходит сообщение.

Чтобы быть более конкретным, я хочу отправить ожидаемый идентификатор и сравнить его с идентификатором потребляемого сообщения:

consumer.on('message', function (message, id) {
    if (id == message.id) 
        console.log(message);
});

EDIT: Это фрагмент кода большего размера. Полный поток это:

  1. Пользователь запрашивает http-запрос с сервера node.js.
  2. HTTP-запрос GET активируется на сервере node.js.
  3. Производитель kafka отправляет сообщение (с уникальным идентификатором) во внешнюю систему и ждет ответа.
  4. ответ получен потребителю kafka. Полученный идентификатор сообщения сравнивается с ожидаемым идентификатором - если он равен - возвращает сообщение как http-ответ.

Учтите, что несколько HTTP-запросов на получение могут быть получены параллельно.


person ItayB    schedule 14.06.2016    source источник
comment
Предположим, событие передает второй параметр с именем id, но тогда id == message.id всегда будет true. Так что именно вы ожидаете здесь?   -  person Oxi    schedule 14.06.2016
comment
@Oxi Я отредактировал сообщение, чтобы оно было более точным.   -  person ItayB    schedule 14.06.2016


Ответы (1)


Вы не можете добавлять аргументы к обратному вызову. Но я считаю, что вы можете добиться того, что вы пытаетесь сделать без этого - просто сославшись на переменную, которая находится в области замыкания.

Например, если у вас есть:

var id = 1001;

consumer.on('message', function(message) {
  if (id == message.id) console.log(message);
});

Я считаю, что это сделает то, что вы хотите.

person David Griffin    schedule 14.06.2016
comment
Интересно, есть ли другой подход... но я думаю, что нет. попробую и обновлю.. - person ItayB; 15.06.2016