我有几个函数,每个函数都创建特定于一个事务的日志;它是一个多线程应用程序,因此 func1 的函数入口对于进行的事务可以是随机的,但对于单个事务,它将仅通过 func1、func2 和 func3 顺序进行。
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。
问题:
- 什么是解决这个问题的正确解决方案,将特定于事务的数据一次发送到弹性搜索?
- 我们可以用 RabbitMQ 解决这个问题吗?如果是这样,我需要为此使用哪些正确的 API?
- 有没有什么方法可以在没有 RabbitMQ 的情况下实现相同的效果,但只能使用 logstash 和 elasticsearch?
- 我不想使用弹性搜索更新 API,因为它可能会为特定于事务的每条日志消息消耗大量搜索操作。