本文整理汇总了Golang中github.com/square/p2/pkg/kp/consulutil.ConsulClient类的典型用法代码示例。如果您正苦于以下问题:Golang ConsulClient类的具体用法?Golang ConsulClient怎么用?Golang ConsulClient使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ConsulClient类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: NewConsulHealthChecker
func NewConsulHealthChecker(client consulutil.ConsulClient) ConsulHealthChecker {
return consulHealthChecker{
client: client,
kv: client.KV(),
consulStore: kp.NewConsulStore(client),
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:7,代码来源:checker.go
示例2: NewConsul
// NOTE: The "retries" concept is mimicking what is built in rcstore.
// TODO: explore transactionality of operations and returning errors instead of
// using retries
func NewConsul(client consulutil.ConsulClient, retries int, logger *logging.Logger) Store {
return &consulStore{
applicator: labels.NewConsulApplicator(client, retries),
kv: client.KV(),
logger: *logger,
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:10,代码来源:consul_store.go
示例3: configureStorage
func (rm *P2RM) configureStorage(client consulutil.ConsulClient, labeler labels.ApplicatorWithoutWatches) {
rm.Client = client
rm.Store = kp.NewConsulStore(client)
rm.RCStore = rcstore.NewConsul(client, labeler, 5)
rm.Labeler = labeler
rm.PodStore = podstore.NewConsul(client.KV())
}
开发者ID:petertseng,项目名称:p2,代码行数:7,代码来源:rm.go
示例4: NewConsul
func NewConsul(client consulutil.ConsulClient, retries int, logger *logging.Logger) Store {
return &consulStore{
retries: retries,
kv: client.KV(),
logger: *logger,
}
}
开发者ID:petertseng,项目名称:p2,代码行数:7,代码来源:consul_store.go
示例5: NewConsulApplicator
func NewConsulApplicator(client consulutil.ConsulClient, retries int) *consulApplicator {
return &consulApplicator{
logger: logging.DefaultLogger,
kv: client.KV(),
retries: retries,
aggregators: map[Type]*consulAggregator{},
retryMetric: metrics.NewGauge(),
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:9,代码来源:consul_applicator.go
示例6: NewConsulStore
func NewConsulStore(client consulutil.ConsulClient) *consulStore {
statusStore := statusstore.NewConsul(client)
podStatusStore := podstatus.NewConsul(statusStore, PreparerPodStatusNamespace)
podStore := podstore.NewConsul(client.KV())
return &consulStore{
client: client,
podStore: podStore,
podStatusStore: podStatusStore,
}
}
开发者ID:petertseng,项目名称:p2,代码行数:10,代码来源:kv.go
示例7: NewConsulStore
func NewConsulStore(client consulutil.ConsulClient) Store {
return &consulStore{
client: client,
podStore: podstore.NewConsul(client.KV()),
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:6,代码来源:kv.go
示例8: processHealthUpdater
// processHealthUpdater() runs in a goroutine to keep Consul in sync with the local health
// state. It is written as a non-blocking finite state machine: events arrive and update
// internal state, and after each event, the internal state is examined to see if an
// asynchronous action needs to be taken.
//
// Events come from three different sources:
// 1. App monitors send their periodic health check results here. When the service is no
// longer being checked, the monitor must close this channel.
// 2. The session manager sends notifications whenever the current Consul session
// expires or is renewed. When the manager exits, it must close this channel.
// 3. Writes to Consul are performed in a separate goroutine, and when each finishes, it
// notifies the updater of what it just wrote.
//
// In response to these events, two actions can be taken:
// A. Exit, once the app monitor has exited and the health check in Consul has been
// removed.
// B. Write the recent service state to Consul. At most one outstanding write will be
// in-flight at any time.
func processHealthUpdater(
client consulutil.ConsulClient,
checksStream <-chan WatchResult,
sessionsStream <-chan string,
logger logging.Logger,
) {
var localHealth *WatchResult // Health last reported by checker
var remoteHealth *WatchResult // Health last written to Consul
var session string // Current session
var write <-chan writeResult // Future result of an in-flight write
var throttle <-chan time.Time // If set, writes are throttled
// Track and limit all writes to avoid crushing Consul
bucketRefreshRate := time.Minute / time.Duration(*HealthWritesPerMinute)
rateLimiter, err := limit.NewTokenBucket(
*HealthMaxBucketSize,
*HealthMaxBucketSize,
bucketRefreshRate,
)
if err != nil {
panic("invalid token bucket parameters")
}
logger.NoFields().Debug("starting update loop")
for {
// Receive event notification; update internal FSM state
select {
case h, ok := <-checksStream:
// The local health checker sent a new result
if ok {
logger.NoFields().Debug("new health status: ", h.Status)
if !healthEquiv(localHealth, &h) {
msg := fmt.Sprintf("Service %s is now %s", h.Service, h.Status)
if health.Passing.Is(h.Status) {
logger.NoFields().Infoln(msg)
} else {
logger.NoFields().Warnln(msg)
}
}
localHealth = &h
} else {
logger.NoFields().Debug("check stream closed")
checksStream = nil
localHealth = nil
}
case s, ok := <-sessionsStream:
// The active Consul session changed
if ok {
logger.NoFields().Debug("new session: ", s)
} else {
logger.NoFields().Debug("session stream closed")
sessionsStream = nil
}
session = s
// The old health result is deleted when its session expires
remoteHealth = nil
case result := <-write:
// The in-flight write completed
logger.NoFields().Debug("write completed: ", result.OK)
write = nil
if result.OK {
remoteHealth = result.Health
if result.Throttle && throttle == nil {
throttle = time.After(time.Duration(*HealthResumeLimit) * bucketRefreshRate)
logger.NoFields().Warningf("Service %s health is flapping; throttling updates", result.Health.Service)
}
}
case <-throttle:
throttle = nil
logger.NoFields().Warning("health is stable; resuming updates")
}
// Exit
if checksStream == nil && remoteHealth == nil && write == nil {
logger.NoFields().Debug("exiting update loop")
return
}
// Send update to Consul
if !healthEquiv(localHealth, remoteHealth) && session != "" && write == nil &&
throttle == nil {
//.........这里部分代码省略.........
开发者ID:drcapulet,项目名称:p2,代码行数:101,代码来源:healthmanager.go
示例9: NewConsul
func NewConsul(client consulutil.ConsulClient) Store {
return &consulStore{
kv: client.KV(),
}
}
开发者ID:rudle,项目名称:p2,代码行数:5,代码来源:consul_store.go
注:本文中的github.com/square/p2/pkg/kp/consulutil.ConsulClient类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论