乐趣区

关于api:Sentinel-GO-API-使用指南

工具与资源核心
帮忙开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源
https://developer.aliyun.com/…

API 使用指南

用户接入应用 Sentinel Go (后文均用 Sentinel 示意 Sentinel Go) 次要须要须要以下几步:

  1. 对 Sentinel 的运行环境进行相干配置并初始化。API 接口应用细节能够参考:配置形式
  2. 埋点(定义资源),该步骤次要是确定零碎中有哪些资源须要防护,资源定义可参考:老手指南
  3. 配置规定,该步骤次要是为每个资源都配置具体的规定,规定的配置可参考:老手指南以及各个模块的应用文档。
  4. 编写资源防护的入口和进口代码。开释形式可参考:老手指南

    通用配置及初始化

    应用 Sentinel 须要在利用启动时对 Sentinel 运行环境进行相干配置并触发初始化。api 包下提供如下函数:
    • InitDefault():从环境变量指定的配置文件以及环境变量中读取相应配置来初始化 Sentinel,若环境变量不存在则应用默认值。
    • Init(configPath string):从给定的 YAML 文件中读取相应配置来初始化 Sentinel。
    • InitWithConfig(confEntity config.Entity): 用户硬编码配置对象 config.Entity 来初始化 Sentinel。
    通用配置项加载策略和配置项请参考 配置形式应用文档
    示例代码:

  5. import (
  6. sentinel “github.com/alibaba/sentinel-golang/api”
  7. )
  8. func initSentinel() {
  9. err := sentinel.Init(confPath)
  10. if err != nil {
  11. // 初始化 Sentinel 失败
  12. }
  13. }
    留神:必须胜利调用 Sentinel 的初始化函数当前再调用埋点 API。

    埋点(定义资源)

    应用 Sentinel 的 Entry API 将业务逻辑封装起来,这一步称为“埋点”。每个埋点都有一个资源名称(resource),代表触发了这个资源的调用或拜访。
    埋点 API 位于 api 包中:
    • Entry(resource string, opts …Option) (base.SentinelEntry, base.BlockError)
    其中 resource 代表埋点资源名,opts 代表埋点配置。这里须要留神的是,返回值参数列表的第一个和第二个参数是互斥的,也就是说,如果 Entry 执行 pass,那么 Sentinel 会返回 (base.SentinelEntry, nil);如果 Entry 执行 blocked,那么 Sentinel 会返回(nil, base.BlockError)。
    目前反对以下埋点配置:
    • WithTrafficType(entryType base.TrafficType):标记该埋点资源的流量类型,其中 Inbound 代表入口流量,Outbound 代表进口流量。若不指定,默认为 Outbound。
    • WithResourceType(resourceType base.ResourceType):标记该埋点资源的分类。
    • WithAcquireCount(acquireCount uint32):标记每次触发该埋点计为几次调用(能够了解为 batch count)。若不指定,默认为 1。
    • WithArgs(args …interface{}):埋点携带的参数列表,为热点参数统计预留。
    • WithSlotChain(chain *base.SlotChain):埋点执行的查看的 slotchain,若不指定,默认应用全局 slotchain
    埋点 API 示例:

  14. import (
  15. sentinel “github.com/alibaba/sentinel-golang/api”
  16. )
  17. // Entry 办法用于埋点
  18. e, b := sentinel.Entry(“your-resource-name”, sentinel.WithTrafficType(base.Inbound))
  19. if b != nil {
  20. // 申请被流控,能够从 BlockError 中获取限流详情
  21. // block 后不须要进行 Exit()
  22. } else {
  23. // 申请能够通过,在此处编写您的业务逻辑
  24. // 务必保障业务逻辑完结后 Exit
  25. e.Exit()
  26. }
    若该次调用被回绝,则 Entry API 会返回 BlockError 代表被 Sentinel 限流。BlockError 提供了限流起因以及触发的规定等信息,能够不便开发者获取相干信息进行记录和解决。

    规定配置

    硬编码方式

    Sentinel 反对原始的硬编码方式加载规定,能够通过各个模块的 LoadRules(rules) 函数加载规定。以流控规定为例:

  27. _, err = flow.LoadRules([]*flow.Rule{
  28. {
  29. Resource: “some-test”,
  30. Threshold: 10,
  31. TokenCalculateStrategy: flow.Direct,
  32. ControlBehavior: flow.Reject,
  33. },
  34. })
  35. if err != nil {
  36. // 加载规定失败,进行相干解决
  37. }

    动静数据源

    Sentinel 提供动静数据源接口进行扩大,用户能够通过动静文件、etcd、consul、nacos 等配置核心来动静地配置规定。

退出移动版