RabbitMQ + Reactor, отправляющий ACK после передачи сообщения?

Все остальные ответы на 100% правильны, но я думал, что добавлю расширенный / окончательный список областей в приложении Node.js, если кто-нибудь встретит это через Google, начиная с изучения Node.js или JavaScript:

Глобальная область действия

Все, что объявлено без ключевого слова var в любом файле, будет доступно из любого места в одном экземпляре сервера узла:

// foo.js
bar = 'baz';


// qux.js
console.log(bar); // prints 'baz'

Обратите внимание, что это считается плохой идеей, потому что это приложение сильно «связано» - это означает, что вам нужно будет открыть foo.js, чтобы выяснить, почему bar = 'baz' в qux.js

Масштаб модуля

Все, что объявлено с ключевым словом var на верхнем уровне (не внутри функции или объекта или любого другого блока) файла node.js, находится в области модуля и будет быть доступным из любого места внутри одного и того же файла, но больше не будет существовать:

// foo.js
var bar = 'baz';
console.log(bar); // prints 'baz'


// qux.js
console.log(bar); // prints 'undefined'

Область функций

Все, что объявлено с помощью ключевого слова var внутри функции, будет доступно только from withi n эта функция, а не нигде:

// foo.js
function myFunction() {
  var bar = 'baz';
  console.log(bar); // prints 'baz'
}

function myOtherFunction() {
  console.log(bar); // prints 'undefined'
}



// qux.js
console.log(bar); // prints 'undefined'

JavaScript - это функция с областью действия . В отличие от других языков [ block scoped ), переменные, объявленные в блоке внутри функции , доступны из любой другой части этой родительской функции . Например, это означает, что если вы объявляете новую переменную внутри цикла, она также доступна вне этого цикла, если вы все еще находитесь внутри родительской функции:

function myFunction() {
  while (thing === true) {
  var bar = 'baz';
  thing = false;
  }
  console.log(bar); // prints 'baz'
}

Shadowing

Если вы обновляете существующую переменную, например используйте ключевое слово var с именем переменной, которое уже было использовано, тогда значение, связанное с этим именем переменной, будет перезаписано в пределах области действия нового объявления :

var bar = 'foo';
console.log(bar) // prints 'foo'

function myFunction() {
  var bar = 'baz';
  console.log(bar);
}
myFunction(); // prints 'baz'
console.log(bar) // prints 'foo'

3
задан Gelunox 17 January 2019 в 12:05
поделиться

1 ответ

Я не думаю, что это можно подтвердить внутри метода отправки. Вместо этого вы можете попробовать:

receiver.consumeManualAck("queue.A")
        .flatMap(ad -> {
           Mono<OutboundMessage> outboundMessageMono =
                Mono.just(new OutboundMessage("", "queue.B", ad.getBody()));
           return sender.send(outboundMessageMono)
                        .doFinally(signalType -> {
                            if (signalType == SignalType.ON_COMPLETE) {
                               ad.ack();
                            } else {
                               ad.nack(false);
                           }
                         });
         });
0
ответ дан pmackowski 17 January 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: