Как проверить, существует ли очередь сообщений RabbitMQ или нет?

Цикл ожидания кажется неоптимальным. Помимо горящих ядер, которые ожидают вращения, вам также понадобится множество хорошо расположенных директив flush, чтобы этот код работал.

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

#pragma omp parallel
#pragma omp single
for (i=1; i<lenx; i++) {
    for (j=1; j<leny; j++) {
#pragma omp task depend(in:A[i-1][j-1],A[i-1][j],A[i][j-1]) depend(out:A[i][j])
        A[i][j] = max(A[i-1][j-1]+1,A[i-1][j]-1, A[i][j-1] -1);
    }
}

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

Еще одна полезная функция OpenMP могла бы быть конструкцией ordered, и она способна придерживаться именно такой зависимости данных:

#pragma omp parallel for
for (int i=1; i<lenx; i++) {
    for (int j=1; j<leny; j++) {
#pragma omp ordered depend(source)
#pragma omp ordered depend(sink:i-1,j-1)        
        A[i][j] = max(A[i-1][j-1]+1,A[i-1][j]-1, A[i][j-1] -1);
    }
}

PS: приведенный выше код не проверен, но он должен получить грубую идея поперек.

26
задан Sᴀᴍ Onᴇᴌᴀ 23 August 2017 в 16:06
поделиться

2 ответа

Не беспокойтесь о проверке.

queue.declare является идемпотентной операцией. Так что, если вы запустите его один раз, два раза, N раз, результат останется прежним.

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

Если вам действительно нужно проверить, существует ли очередь (обычно это не нужно), сделайте пассивное объявление очереди. Эта операция завершается успешно, если очередь существует, или приводит к ошибке, если она не существует.

57
ответ дан scvalex 28 November 2019 в 06:35
поделиться

Существует meta API пружиной-amqp (реализация Java)

@Autowired
public RabbitAdmin rabbitAdmin;

//###############get you queue details##############
Properties properties = rabbitAdmin.getQueueProperties(queueName);

//do your custom logic
if( properties == null)
{
    createQueue(queueName);
}
0
ответ дан 28 November 2019 в 06:35
поделиться
Другие вопросы по тегам:

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