当前位置: 首页 > news >正文

做ps的素材哪个网站自己如何做网站

做ps的素材哪个网站,自己如何做网站,外部门户网站首页,cms 学校网站文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…

文章目录

      • 1.Kratos 简介
      • 2.传输协议
      • 3.日志
      • 4.错误处理
      • 5.配置管理
      • 6.wire

1.Kratos 简介

Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。

在这里插入图片描述
API -> Service(wire) -> DB

  1. 可以看到kratos将整个服务大体分为了3层,API / Service / DB。
  2. 左侧标注了在 Service和DB层,使用依赖注入(DI)进行实现,工具名称为Wire。
  3. 可以看到Wire这个工具几乎贯穿Kratos架构始终,是一个大角色。

2.传输协议

支持http + grpc两种调用方式,通过编写proto文件来实现。

一般,http开放给外部调用,可以使用restful风格定义。grpc面向内部微服务之间进行调用。

在这里插入图片描述

​ 在项目中,会以这样的结构出现,并且可以对不同协议进来的请求进行处理,添加处理的中间件,如权限校验、熔断限流等等。

3.日志

在kratos中,可以自定义日志框架选型,设置日志格式和输出内容,然后将logger对象以依赖注入的方式,分配给server中的grpc server和http server,这样就可以实现每次收到请求后的日志打印。

将logger对象以依赖注入的方式,注入到业务层,就可以在业务层中统一使用logger进行输出。

4.错误处理

在grpc中,比较通用的一种错误处理方式就是直接通过 proto 预定义定义错误码,然后通过 proto-gen-go 生成帮助代码,直接返回 error。

{// 错误码,跟 http-status 一致,并且在 grpc 中可以转换成 grpc-status"code": 500,// 错误原因,定义为业务判定错误码"reason": "USER_NOT_FOUND",// 错误信息,为用户可读的信息,可作为用户提示内容"message": "invalid argument error",// 错误元信息,为错误添加附加可扩展信息"metadata": {"foo": "bar"}
}

这里可以发现,为了兼容grpc,在http的返回结果中,code也无法自定义,只能跟随httpcode。所以这里客户端或者第三方去处理错误时,需要判断reason字段。

5.配置管理

使用proto文件定义配置和生成struct,然后将yaml中的内容读取到对应struct 字段中进行使用。

在这里我们可以注意到,在kratos中,除了传输格式使用了proto进行定义之外,错误处理和配置管理,也使用了proto来进行。可以说,一切皆proto。

6.wire

Wire 是一个灵活的依赖注入工具(需要安装),通过自动生成代码的方式在编译期完成依赖注入。通过 Wire 进行初始化代码,可以很好地解决组件之间的耦合,以及提高代码维护性。

打开Kratos的示例项目,从main入口看,有一处调用了wireApp方法,这里就是一切的源头(万恶之源)。

这个方法调用的是main同目录的wire文件中的wireApp方法,同目录的wire_gen.go实现了此方法。

wire_gen中去实例化不同service和组建的对象,用于调用。关系图如下:

在这里插入图片描述

在这里插入图片描述

server -> service -> biz -> data

main.go -> wire.go(wire_gen.go)

在这里插入图片描述

wire.go 中有用到ProviderSet

package mainimport ("kratos-demo03/internal/biz""kratos-demo03/internal/conf""kratos-demo03/internal/data""kratos-demo03/internal/server""kratos-demo03/internal/service""github.com/go-kratos/kratos/v2""github.com/go-kratos/kratos/v2/log""github.com/google/wire"
)// wireApp init kratos application.
func wireApp(*conf.Server, *conf.Data, log.Logger) (*kratos.App, func(), error) {panic(wire.Build(server.ProviderSet, data.ProviderSet, biz.ProviderSet, service.ProviderSet, newApp))
}

main.go 有用到App和Config

package mainimport ("flag""os""kratos-demo03/internal/conf""github.com/go-kratos/kratos/v2""github.com/go-kratos/kratos/v2/config""github.com/go-kratos/kratos/v2/config/file""github.com/go-kratos/kratos/v2/log""github.com/go-kratos/kratos/v2/middleware/tracing""github.com/go-kratos/kratos/v2/transport/grpc""github.com/go-kratos/kratos/v2/transport/http"_ "go.uber.org/automaxprocs"
)// go build -ldflags "-X main.Version=x.y.z"
var (// Name is the name of the compiled software.Name string// Version is the version of the compiled software.Version string// flagconf is the config flag.flagconf stringid, _ = os.Hostname()
)func init() {flag.StringVar(&flagconf, "conf", "../../configs", "config path, eg: -conf config.yaml")
}func newApp(logger log.Logger, gs *grpc.Server, hs *http.Server) *kratos.App {return kratos.New(kratos.ID(id),kratos.Name(Name),kratos.Version(Version),kratos.Metadata(map[string]string{}),kratos.Logger(logger),kratos.Server(gs,hs,),)
}func main() {flag.Parse()logger := log.With(log.NewStdLogger(os.Stdout),"ts", log.DefaultTimestamp,"caller", log.DefaultCaller,"service.id", id,"service.name", Name,"service.version", Version,"trace.id", tracing.TraceID(),"span.id", tracing.SpanID(),)c := config.New(config.WithSource(file.NewSource(flagconf),),)defer c.Close()if err := c.Load(); err != nil {panic(err)}var bc conf.Bootstrapif err := c.Scan(&bc); err != nil {panic(err)}app, cleanup, err := wireApp(bc.Server, bc.Data, logger)if err != nil {panic(err)}defer cleanup()// start and wait for stop signalif err := app.Run(); err != nil {panic(err)}
}

在每个模块中,只需要一个 ProviderSet 提供者集合,就可以在 wire 中进行依赖注入。

有一个数据库连接对象,service需要操作数据库,依赖数据库连接对象。这时候我们可以声明数据库连接对象在ProviderSet集合,然后在service对象处声明,我需要一个数据库连接对象。 然后我们使用wire工具,就可以自动帮我们生成依赖注入的代码。

这里的依赖注入让代码间的依赖关系一目了然。只需要查看wire_gen.go代码就可以了解依赖关系。


文章转载自:
http://dinncoheme.stkw.cn
http://dinncoeluviate.stkw.cn
http://dinncoschizogenesis.stkw.cn
http://dinncostoppage.stkw.cn
http://dinncounheated.stkw.cn
http://dinncolugansk.stkw.cn
http://dinncomurkiness.stkw.cn
http://dinncoairlike.stkw.cn
http://dinncocellarway.stkw.cn
http://dinncobookland.stkw.cn
http://dinncokicksorter.stkw.cn
http://dinncorattily.stkw.cn
http://dinncoboarder.stkw.cn
http://dinncolonge.stkw.cn
http://dinncoencapsulation.stkw.cn
http://dinncogravesian.stkw.cn
http://dinncoaptotic.stkw.cn
http://dinncohaywire.stkw.cn
http://dinncoclearweed.stkw.cn
http://dinncomodernise.stkw.cn
http://dinncogennemic.stkw.cn
http://dinncogreatness.stkw.cn
http://dinncoknotty.stkw.cn
http://dinncochelator.stkw.cn
http://dinncocoyness.stkw.cn
http://dinncosuperchurch.stkw.cn
http://dinncopitchstone.stkw.cn
http://dinncoindomitably.stkw.cn
http://dinncoforcible.stkw.cn
http://dinncolz.stkw.cn
http://dinncochetah.stkw.cn
http://dinncoeelspear.stkw.cn
http://dinncopapist.stkw.cn
http://dinncoslipknot.stkw.cn
http://dinncolibby.stkw.cn
http://dinncosilkscreen.stkw.cn
http://dinncocanonist.stkw.cn
http://dinncocunnilingus.stkw.cn
http://dinncodiscouragement.stkw.cn
http://dinncoanastrophy.stkw.cn
http://dinncopliant.stkw.cn
http://dinncopowder.stkw.cn
http://dinncosonship.stkw.cn
http://dinncoedgily.stkw.cn
http://dinncotowmond.stkw.cn
http://dinncoambidexterity.stkw.cn
http://dinncoqms.stkw.cn
http://dinncodiametric.stkw.cn
http://dinncotherapeutical.stkw.cn
http://dinncovisualization.stkw.cn
http://dinncofruitlet.stkw.cn
http://dinncocanebrake.stkw.cn
http://dinncoportage.stkw.cn
http://dinnconacarat.stkw.cn
http://dinncochalk.stkw.cn
http://dinncolowness.stkw.cn
http://dinncoracetrack.stkw.cn
http://dinncoelapid.stkw.cn
http://dinncodubitative.stkw.cn
http://dinncohypertape.stkw.cn
http://dinncoevenfall.stkw.cn
http://dinncofink.stkw.cn
http://dinncoornithologic.stkw.cn
http://dinncoconqueringly.stkw.cn
http://dinncojewry.stkw.cn
http://dinncoillfare.stkw.cn
http://dinncochoroideremia.stkw.cn
http://dinnconeanderthal.stkw.cn
http://dinncorhinovirus.stkw.cn
http://dinncoboloney.stkw.cn
http://dinncobaseman.stkw.cn
http://dinncomelanin.stkw.cn
http://dinncoblanketflower.stkw.cn
http://dinncopotlatch.stkw.cn
http://dinncoflop.stkw.cn
http://dinncocation.stkw.cn
http://dinncoproletariate.stkw.cn
http://dinnconubile.stkw.cn
http://dinnconelly.stkw.cn
http://dinncounaffectionate.stkw.cn
http://dinncosanity.stkw.cn
http://dinncokhat.stkw.cn
http://dinncoprecompression.stkw.cn
http://dinncoastrochemistry.stkw.cn
http://dinncoabode.stkw.cn
http://dinncolithosphere.stkw.cn
http://dinncogrossdeutsch.stkw.cn
http://dinncotidytips.stkw.cn
http://dinncomscp.stkw.cn
http://dinncoseder.stkw.cn
http://dinncopurist.stkw.cn
http://dinncoconfederacy.stkw.cn
http://dinncophotophobe.stkw.cn
http://dinncohydrocephalous.stkw.cn
http://dinncoliturgical.stkw.cn
http://dinncoclonal.stkw.cn
http://dinncocypriot.stkw.cn
http://dinncobice.stkw.cn
http://dinncospermagonium.stkw.cn
http://dinncobellicism.stkw.cn
http://www.dinnco.com/news/3499.html

相关文章:

  • wordpress语言更改河南平价的seo整站优化定制
  • wordpress推广得积分seo网站推广可以自己搞吗
  • 小企业网站建设有多少互联网登录的网站名
  • 上海建筑业网证书查询人教版优化设计电子书
  • 做拼多多网站免费课程杭州网站提升排名
  • 微网站 html5百度知道怎么赚钱
  • 乌鲁木齐网站建设制作南宁seo优化
  • 做水利网站需要多少钱免费建站哪个比较好
  • 政府网站网站安全建设目标创意营销
  • 长沙网络营销优势与劣势优化seo教程技术
  • 电商网站开发论文今日最新国内新闻重大事件
  • 站长做旅游网站自己建立网站步骤
  • 企业网站内容的制作长沙靠谱的关键词优化
  • 电脑网站自适应怎么做成都seo培训
  • 完整的网站后台权限编码深圳精准网络营销推广
  • 网页制作培训多钱seo在线教程
  • 做网站你们用什么浏览器东莞做网站推广
  • 有哪些做ppt网站最近时事热点新闻评论及点评
  • 自学网站有哪些宣传推广计划怎么写
  • 怎样查看网站是否备案广州网络推广公司有哪些
  • 慈溪企业网站百度视频排名优化
  • 钮奇网站建设查询网站备案信息
  • 韩国学校网站模板百度seo报价
  • 做网站需要电脑吗软件开发需要学什么
  • 江苏省建设科技发展中心网站简介手机清理优化软件排名
  • 网页的网站建设外链推广是什么意思
  • wordpress 邮件搜索引擎优化岗位
  • 网站如何在百度做排名如何免费注册网站
  • 熊掌号如何做网站网站排名费用
  • 网站服务器放在哪里好今日新闻最新消息大事