1#ifndef NEFORCE_NETWORK_HTTP_LOAD_BALANCER_HPP__
2#define NEFORCE_NETWORK_HTTP_LOAD_BALANCER_HPP__
16NEFORCE_BEGIN_NAMESPACE__
42 string scheme{
"http"};
47 size_t consecutive_failures{0};
49 lb_backend() =
default;
50 lb_backend(
string h,
ports p,
string s =
"http",
size_t w = 1) :
78class NEFORCE_API load_balancer {
88 size_t max_failures_{3};
92 health_check_cb health_checker_;
95 load_balancer() =
default;
99 backends_.push_back(
move(backend));
102 void remove_backend(
const string& host,
ports port) {
104 for (
auto it = backends_.begin(); it != backends_.end(); ++it) {
105 if (it->host == host && it->port == port) {
117 void set_health_check(health_check_cb cb) {
119 health_checker_ =
move(cb);
157 for (
const auto& b: backends_) {
163 size_t backend_count() const noexcept {
return backends_.
size(); }
164 lb_strategy strategy() const noexcept {
return strategy_; }
185NEFORCE_END_NAMESPACE__
void set_max_failures(size_t max)
设置容忍的最大连续失败次数
static void release_backend(lb_backend *backend)
释放后端节点(请求完成)
void mark_failure(lb_backend *backend)
标记后端请求失败
void set_health_check_timeout(milliseconds ms)
设置健康检查超时
vector< string > backend_hosts() const
获取后端主机列表快照
size_t healthy_count() const
获取健康节点数
lb_backend * select_backend()
选择后端节点
void run_health_checks()
运行健康检查(将所有标记为不健康但已恢复的节点恢复)
void set_health_check_interval(milliseconds ms)
设置健康检查间隔
constexpr size_type size() const noexcept
获取当前元素数量
constexpr void push_back(const T &value)
在末尾拷贝插入元素
constexpr const T & max(const T &a, const T &b, Compare comp) noexcept(noexcept(comp(a, b)))
返回两个值中的较大者
unsigned long uint64_t
64位无符号整数类型
unsigned char uint8_t
8位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
constexpr string to_string(const CharT &c)
将字符转换为普通字符串