elasticsearch ES中带有Alpakka索引的Akka流:索引名仅在开始执行时计算,elasticsearch,akka,akka-stream,alpakka,elasticsearch,Akka,Akka Stream,Alpakka" /> elasticsearch ES中带有Alpakka索引的Akka流:索引名仅在开始执行时计算,elasticsearch,akka,akka-stream,alpakka,elasticsearch,Akka,Akka Stream,Alpakka" />

elasticsearch ES中带有Alpakka索引的Akka流:索引名仅在开始执行时计算

elasticsearch ES中带有Alpakka索引的Akka流:索引名仅在开始执行时计算,elasticsearch,akka,akka-stream,alpakka,elasticsearch,Akka,Akka Stream,Alpakka,我已经用Akka Streams和Alpakka编写了一些代码,它们读取Amazon SQS并在Elasticsearch中对事件进行索引。一切都很顺利,性能也很好,但我对索引名有问题。我有以下代码: class ElasticSearchIndexFlow(restClient: RestClient) { private val elasticSettings = ElasticsearchSinkSettings(bufferSize = 10) def flow: Flow[

我已经用Akka Streams和Alpakka编写了一些代码,它们读取Amazon SQS并在Elasticsearch中对事件进行索引。一切都很顺利,性能也很好,但我对索引名有问题。我有以下代码:

class ElasticSearchIndexFlow(restClient: RestClient) {

  private val elasticSettings = ElasticsearchSinkSettings(bufferSize = 10)

  def flow: Flow[IncomingMessage[DomainEvent, NotUsed], Seq[IncomingMessageResult[DomainEvent, NotUsed]], NotUsed] =
    ElasticsearchFlow.create[DomainEvent](index, "domain-event", elasticSettings)(
      restClient,
      DomainEventMarshaller.domainEventWrites
    )

  private def index = {
    val now = DateTime.now()
    s"de-${now.getYear}.${now.getMonthOfYear}.${now.getDayOfMonth}"
  }
}
问题是,在运行流几天后,索引名没有改变。我想象Akka Streams在引擎盖下创建了一个融合的参与者,用于获取索引名的函数
index
仅在执行开始时进行评估


知道如何根据当前日期使用索引名为ES中的事件编制索引吗?

问题的解决方案是在上一步中使用IncomingMessage.withIndexName设置索引名

因此:

以及:

def flow: Flow[(DomainEvent, Message), IncomingMessage[DomainEvent, Message], NotUsed] =
  Flow[(DomainEvent, Message)].map {
    case (domainEvent, message) =>
      IncomingMessage(Some(domainEvent.eventId), domainEvent, message)
        .withIndexName(indexName(domainEvent.ocurredOn))
}
def flow: Flow[IncomingMessage[DomainEvent, NotUsed], Seq[IncomingMessageResult[DomainEvent, NotUsed]], NotUsed] =
  ElasticsearchFlow.create[DomainEvent]("this-index-name-is-not-used", "domain-event", elasticSettings)(
    restClient,
    DomainEventMarshaller.domainEventWrites
  )