У меня есть пара функций, и каждая функция создает журналы, относящиеся к одной транзакции; Это многопоточное приложение, поэтому запись функции func1 может быть случайной для транзакции, но для одной транзакции она будет выполняться только с помощью func1, func2 и func3.Способ отправки половинных журналов в RabbitMQ перед отправкой полного журнала на logstash/elasticsearch
func1(transactionId) {
log("%d Now in func1", transactionId);
}
func2(transactionId) {
log("%d Now in func2", transactionId);
}
func3(transactionId) {
log("%d Now in func3", transactionId);
}
Теперь я хочу написать в logstash сразу для каждой транзакции ТОЛЬКО за раз; то есть
1 Now in func1 Now in func2 Now in fun3
, а затем это необходимо, наконец, перейти на поиск elasticsearch;
Я подумывал написать половину транзакционного журнала в временную очередь RabbitMQ, а затем по завершении полной транзакции я передам его в очередь производителей RabbitMQ для отправки сообщения в logstash;
Как
func1(transactionId) {
add2RMQ(transactionId, "Now in func1");
}
func2(transactionId) {
add2RMQ("transactionId, "Now in func2");
}
func3(transactionId) {
add2RMQ("transactionId, "Now in func3");
/* Last point of transaction */
commit2RMQ(transactionId);
}
Время commit2RMQ выполнить logstash должен получить полное сообщение, специфичную для операции записи в elasticsearch.
Вопрос:
- Что является правильным решением для решения этой проблемы, чтобы отправить данные, относящиеся к сделке сразу elasticsearch?
- Можем ли мы решить эту проблему с помощью RabbitMQ? Если да, то какой правильный API я должен использовать для этого?
- Есть ли какой-либо способ, которым я могу достичь этого без RabbitMQ, но только с помощью logstash и elasticsearch?
- Я не хочу использовать API обновления elasticsearch, так как он может потреблять много операций поиска для каждого сообщения журнала, специфичного для трансакции.
Большое спасибо; Я очень ценю то, как вы решили проблему с точки зрения предоставления мне решения, характерного для случаев сбоев. Я сделаю этот эксперимент. – Viswesn