连接到 Elasticsearch Heroku 数据库

3
我已在Heroku上设置了一个起始帐户,并添加了Bonsai elasticsearch插件。我正在尝试通过Java应用程序连接到它,但似乎无法通过Transport Client或在elasticsearch文档页面上解释的NodeBuilder选项进行连接。
我可以运行以下CURL来发布数据:
curl -XPOST http://banyan-7086980.us-east-1.bonsai.io/med/test/hello3 -d '{"title":"Hello world2"}'

我的当前思路是:

    Client client = new TransportClient()
            .addTransportAddress(new InetSocketTransportAddress("http://banyan-7086980.us-east-1.bonsai.io", 9300));

但是这并没有起作用。我漏掉了什么吗?
2个回答

0

大多数在Heroku上提供托管Elasticsearch的服务都不支持除HTTP之外的任何其他传输方式。从Java与Elasticsearch进行交互的规范方式是使用Transport客户端或Node客户端,这两者都尝试连接到HTTP端点。

Transport和Node客户端使用自定义的二进制协议,该协议与HTTP不兼容。

此外,默认情况下,此二进制协议不支持一些您应该在生产设置中期望的核心功能:身份验证和加密。

如果您的要求包括在Heroku上运行并使用官方Java客户端,请查看Found Elasticsearch on Heroku,该模块提供了对使用自定义传输模块的传输客户端的支持:https://github.com/foundit/elasticsearch-transport-module

披露:我是Found的开发人员之一


-1

Bonsai是一个托管的elasticsearch服务,如果您正在使用Heroku插件,则会抽象出ES和Heroku的内部。

例如,您正在访问的URL位于80端口(http),而您正在尝试连接到9300端口(这是默认的Elasticsearch端口)。这告诉我,在它们之间有一个代理层,为安全原因隐藏了9200和9300端口。

该怎么办?

您可以尝试将Java客户端连接到80端口。

Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress("http://banyan-7086980.us-east-1.bonsai.io", 80)); 

如果您正在使用Heroku来托管您的应用程序,请遵循Bonsai插件的说明,使用ENV变量设置连接。

如果您只想拥有托管实例,可以使用qbox等替代方案found

我更喜欢使用Openshift上的Elasticsearch


Java传输客户端不是基于HTTP的。Found通过一个小插件支持传输客户端,该插件添加了对SSL和身份验证的支持。更多信息请参见此处:https://www.found.no/documentation/tutorials/using-java-transport/(完全披露:我在Found工作)。 - Alex Brasetvik
好的信息,谢谢!我正在寻找最佳的托管方式。我正在从Heroku运行一个应用/实用程序,并在那里看到了Bonsai,最初尝试设置那个。我会看看Found和OpenShift(我以前使用过OpenShift,但不知道他们有elasticsearch托管)。 - user3470960

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接