joke-lee opened a new issue, #2860: URL: https://github.com/apache/brpc/issues/2860
``` #include <iostream> #include <string> //#include <braft/protobuf_file.h> //#include <braft/raft.h> //#include <braft/route_table.h> //#include <braft/storage.h> //#include <braft/util.h> //#include <braft/cli.h> //#include <braft/cli.pb.h> #include <brpc/channel.h> #include <brpc/controller.h> #include <brpc/server.h> #include <bthread/bthread.h> #include <butil/logging.h> #include <bvar/bvar.h> using namespace std; int main() { brpc::ChannelOptions options; options.protocol = "http"; options.max_retry = 100; options.connect_timeout_ms = 30; options.timeout_ms = 1000; string endpoint = "10.0.0.1:8000"; brpc::Channel channel; brpc::Controller cntl; cntl.set_max_retry(30); if (channel.Init(endpoint.c_str(), "", &options) != 0) { return 0; } cntl.http_request().uri() = endpoint; // Request URL cntl.http_request().set_method(brpc::HTTP_METHOD_GET); channel.CallMethod(NULL, &cntl, NULL, NULL, NULL/*done*/); if (cntl.Failed()) { //cntl.ErrorCode() != brpc::EHTTP std::cout << " cntl.max_retry=" << cntl.max_retry() << " retry_count=" << cntl.retried_count() << " ErrorText=" << cntl.ErrorText() << ", ErrorCode=" << cntl.ErrorCode() << std::endl; } else { std::cout << "success" << std::endl; } return 0; } ``` 设置一个网络不可达的地址 10.0.0.1:8000 上面设置了重试 30 次,但是实际测试结果只有重试 2 次 ``` cntl.max_retry=30 retry_count=2 ErrorText=[E110]Fail to connect Socket{id=1 addr=10.0.0.1:8000} (0x0x1815a00): Connection timed out [R1][E110]Fail to connect Socket{id=102 addr=10.0.0.1:8000} (0x0x7f7d7c00bfa0): Connection timed out [R2][E101]Fail to connect Socket{id=8589934594 addr=10.0.0.1:8000} (0x0x1815c80): Network is unreachable, ErrorCode=101 ``` 但是重试设置 1 次 ``` #include <iostream> #include <string> //#include <braft/protobuf_file.h> //#include <braft/raft.h> //#include <braft/route_table.h> //#include <braft/storage.h> //#include <braft/util.h> //#include <braft/cli.h> //#include <braft/cli.pb.h> #include <brpc/channel.h> #include <brpc/controller.h> #include <brpc/server.h> #include <bthread/bthread.h> #include <butil/logging.h> #include <bvar/bvar.h> using namespace std; int main() { brpc::ChannelOptions options; options.protocol = "http"; options.max_retry = 100; options.connect_timeout_ms = 1; options.timeout_ms = 1000; string endpoint = "10.0.0.1:8000"; brpc::Channel channel; brpc::Controller cntl; cntl.set_max_retry(1); if (channel.Init(endpoint.c_str(), "", &options) != 0) { return 0; } cntl.http_request().uri() = endpoint; // Request URL cntl.http_request().set_method(brpc::HTTP_METHOD_GET); channel.CallMethod(NULL, &cntl, NULL, NULL, NULL/*done*/); if (cntl.Failed()) { //cntl.ErrorCode() != brpc::EHTTP std::cout << " cntl.max_retry=" << cntl.max_retry() << " retry_count=" << cntl.retried_count() << " ErrorText=" << cntl.ErrorText() << ", ErrorCode=" << cntl.ErrorCode() << std::endl; } else { std::cout << "success" << std::endl; } return 0; } ``` 看报错信息是符合预期,只重试了一次 ``` /root/CLionProjects/untitled/cmake-build-debug/untitled cntl.max_retry=1 retry_count=1 ErrorText=[E110]Fail to connect Socket{id=1 addr=10.0.0.1:8000} (0x0xb11a00): Connection timed out [R1][E110]Fail to connect Socket{id=102 addr=10.0.0.1:8000} (0x0x7f092800c020): Connection timed out, ErrorCode=110 Process finished with exit code 0 ``` 是不是重试次数只能是 0 1 2 才有效果?,即使设置重试的大于 3 次,最多也只能重试 2 次? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org For additional commands, e-mail: dev-h...@brpc.apache.org