如何使用 boost asio 连接到 elasticsearch?

How to connect to elasticsearch using boost asio?

我正在尝试编写一个 C++ 片段来为 elasticsearch 服务器创建 POST。服务器是 IP 172.20.1.160 上的 运行,我可以使用 curl PUT 数据,就像在 Elasticsearch 教程中一样:

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

{ "user" : "kimchy", "post_date":“2009-11-15T14:12:12”, "message" : "trying out 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

有人可以告诉我我需要知道什么才能让它工作吗?

默认情况下 elasticsearch 只监听 localhost,如果你想让它监听所有端口,在 config/elasticsearch.yml 添加network.host: 0.0.0.0 行并重新启动 elasticsearch。