TestContainers中的Zookeeper + Solr

问题描述 投票:0回答:1

我正在使用org.testcontainers与Solr进行集成测试。

[[在我的单元测试中使用SolrJ]

[当我使用嵌入式ZooKeeper实例以云模式启动Solr时,我能够通过单元测试连接到solr实例,但是无法从我的SolrClient连接到ZooKeeper。我认为这是因为嵌入式ZooKeeper绑定到IP 127.0.0.1且无法访问。

[如果我[使用共享网络]启动两个单独的容器,ZooKeeper和Solr,则可以将Solr连接到ZooKeeper,并且可以从单元测试连接到Zookeeper,但是当Zookeeper返回活动的SOLR节点时,它将返回内部无法从我的单元测试[在我的SolrJ客户端中]访问的服务器IP。

我不确定该去哪里。也许有一种网络模式可以进行地址转换?

有什么想法?

solr apache-zookeeper solrj testcontainers
1个回答
0
投票

似乎这个问题无法轻易解决。

一种方法是将固定端口与testcontainer一起使用。在这种情况下,端口9983和8983将映射到主机上的相同端口。这样就可以使用Solr Cloud Client。但这仅在您可以确保测试按顺序运行时才有效,这可能有点棘手,例如Jenkins上的Feature Branchs。

一种不同的解决方案是使用另一个客户端。由于Solrj提供了多个客户端,因此您可以选择要使用的客户端。如果只想搜索或更新,则可以使用LBHttp2SolrClient在多个节点之间进行负载平衡。如果要对集成测试使用特定的客户端,则此示例可以工作:

// Create the solr container.
SolrContainer container = new SolrContainer();

// Start the container. This step might take some time...
container.start();

// Do whatever you want with the client ...
SolrClient client = new Http2SolrClient.Builder("http://localhost:" + container.getSolrPort() + "/solr").build();
SolrPingResponse response = client.ping("dummy");

// Stop the container.
container.stop();

以下是java中的solr客户端列表:https://lucene.apache.org/solr/guide/8_3/using-solrj.html#types-of-solrclients

尝试将Solr添加为正式的测试容器(https://github.com/testcontainers/testcontainers-java/issues/1562

© www.soinside.com 2019 - 2024. All rights reserved.