如何使用 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。
我正在尝试编写一个 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。