hibernate 休眠搜索-即使Elasticearch集群关闭,也可启动应用程序

li9yvcax  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(119)

我们将休眠搜索集成到我们的CRUD微服务(简单的Spring启动应用程序)中,它的工作方式非常出色。让我们的架构师感到紧张的一个事实是,当Elasticearch没有运行时,CRUD服务拒绝启动。
有没有办法告诉Hibernate Search应该忽略Elasticearch集群状态?

lmvvr0a8

lmvvr0a81#

你可以在不尝试访问Elasticearch的情况下启动Hibernate搜索,这是有文档记录的:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#backend-elasticsearch-configuration-version
简而言之,设置以下属性:

hibernate.search.backend.version_check.enabled = false
hibernate.search.backend.version = 7.17
hibernate.search.schema_management.strategy = none

不利之处是:
1.Hibernate Search本身不能确定Elasticearch的版本(显然,因为Elasticearch可能会关闭),所以您必须自己提供该版本。如果您提供的版本是错误的,则在调用Elasticearch API时,您可能会使用错误的语法或端点进行Hibernate搜索。
1.Hibernate Search不会在启动时创建/验证Elasticearch模式(显然,因为Elasticearch可能已关闭),因此您必须确保Elasticearch模式已自己初始化(并且有效)(例如,使用手动模式管理)。手动模式初始化可以在启动后进行,但必须在索引/搜索之前进行(见下文)。
1.在Elasticearch关闭的情况下,如果被要求索引某些内容或运行查询,Hibernate Search仍将失败,但您对此无能为力。有些人在启动时手动检查Elasticearch是否关闭,在这种情况下,通过动态设置配置来完全禁用Hibernate搜索,这样至少他们仍然可以更新数据库中的实体。但随后,他们的索引不再更新,搜索功能仍然不可用。
编辑:您还可以通过使用outbox-polling协调策略来解决第三个问题(如果Elasticearch关闭,索引将失败),该策略将在数据库中记录索引事件并在后台处理它们,而不是直接索引。当Elasticearch正在进行时,索引仍将失败,但它将在一些后台进程中失败,而不是在主应用程序线程中失败,并且一旦Elasticearch重新启动,您将能够重新处理事件。

相关问题