0

我正在尝试编写一个 C++ 片段来对弹性搜索服务器进行 POST。服务器在 ip 172.20.1.160 上运行,我可以使用 curl 输入数据,就像在 Elasticsearch 教程中一样:

curl -XPUT 'localhost:9200/twitter/tweet/1?op_type=create&pretty' -H 'Content-Type: application/json' -d'

{“用户”:“kimchy”,“post_date”:“2009-11-15T14:12:12”,“消息”:“试用 Elasticsearch”}'

但是当我尝试用 boost ASIO 做类似的事情时,我的连接显然被拒绝了。

这是显示我如何尝试创建连接以及产生错误的最小可编译代码:

///   Compiled with:
///     g++ --std=c++14 foo.cpp  -lboost_system -lpthread
#include <boost/asio.hpp>

constexpr const char *carbon_port   = "2003";
constexpr const char *ES_port       = "9200";
constexpr const char *server_ip     = "172.20.1.160";


int main()
{
    boost::asio::io_service io_service;
    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query(server_ip, ES_port);
    auto endpoint = *resolver.resolve(query);
    boost::asio::ip::tcp::socket socket (io_service);
    socket.connect(endpoint);
}

值得一提的是,我还在同一台机器上运行了一个碳石墨服务器,我可以通过纯文本协议在那里连接和发送数据,但是我无法与 elasticsearch 建立套接字连接,我得到了异常:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
  what():  connect: Connection refused

有人能告诉我我需要知道什么才能让这个工作吗?

4

1 回答 1

0

默认情况下, elasticsearch仅侦听localhost,如果您希望它侦听所有端口,请config/elasticsearch.yml添加该行network.host: 0.0.0.0并重新启动 elasticsearch。

于 2017-04-20T11:14:22.370 回答