Когда вы выполняете команду publish
, вы не уверены, что сообщение опубликовано в очереди.
Если вы хотите быть уверены, что вам нужно использовать, вы должны использовать publish confirm
или tx transaction
.
прочитать этот пост http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/
Примечание: По умолчанию клиенты не имеют какой-либо политики HA, вы должны реализовать. Смотрите раздел Streaming Lightweight Publisher Confirms
:
private volatile SortedSet<Long> unconfirmedSet =
Collections.synchronizedSortedSet(new TreeSet());
...
ch.setConfirmListener(new ConfirmListener() {
public void handleAck(long seqNo, boolean multiple) {
if (multiple) {
unconfirmedSet.headSet(seqNo+1).clear();
} else {
unconfirmedSet.remove(seqNo);
}
}
public void handleNack(long seqNo, boolean multiple) {
// handle the lost messages somehow
}
});
Примечание 2: сообщение никогда не «положить» в обмен, но всегда внутри очереди.
Когда вы вызываете метод 'publish', он помещает его в обмен, мой вопрос в том, что, если сервер MQ кролика не работает, и моя задача resque не может публиковать, как повторно публиковать/повторять? см. этот раздел ** Как сообщение признается в отношении транзакций и издателя Подтверждает ** ссылки http://rubybunny.info/articles/queues.html#message_acknowledgements, Он говорит, что если S1 не работает, это то, что я ищу для решения , – kamal