精华内容
下载资源
问答
  • golang微服务-源码

    2021-02-14 10:17:51
    golang微服务
  • Golang 微服务

    2018-12-29 23:44:34
    本系列文章主要讲解 Golang 微服务开源项目 go-kit 及 go-micro 的使用、源码解读。 go-kit go-kit 入门 go-kit 设计精髓 各个组件的使用及源码解读 服务发现 Log & Metrics & Tracing Ratelimit & ...

    本系列文章主要讲解 Golang 微服务开源项目 go-kitgo-micro 的使用、源码解读。

    go-kit

    go-micro

    • 入门
    • 设计精髓
    • 各个组件的使用及源码解读

      • Service Discovery
      • Load Balancing
      • Message Encoding
      • Sync Streaming
      • Async Messaging
      • Pluggable Interfaces

    展开全文
  • Golang 微服务教程(一)字数统计: 4,073原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式前言系列概览...

    Golang 微服务教程(一)

    字数统计: 4,073

    原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。

    本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式

    前言

    系列概览

    《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。

    本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consignment-service 的简洁版。在接下来的第 2~10 节文章中,我们会陆续创建以下微服务:

    • consignment-service(货运服务)
    • inventory-service(仓库服务)
    • user-service(用户服务)
    • authentication-service(认证服务)
    • role-service (角色服务)
    • vessel-service(货船服务)

    用到的完整技术栈如下:

    Golang, gRPC, go-micro// 开发语言及其 RPC 框架Google Cloud, MongoDB// 云平台与数据存储Docker, Kubernetes, Terrafrom // 容器化与集群架构NATS, CircleCI// 消息系统与持续集成

    代码仓库

    作者代码:EwanValentine/shippy,译者的中文注释代码: wuYin/shippy

    每个章节对应仓库的一个分支,比如本文part1 的代码在 feature/part1

    开发环境

    笔者的开发环境为 macOS,本文中使用了 make 工具来高效编译,Windows 用户需 手动安装

    $ go envGOARCH="amd64"# macOS 环境GOOS="darwin"# 在第二节使用 Docker 构建 alpine 镜像时需修改为 linuxGOPATH="/Users/wuyin/Go"GOROOT="/usr/local/go"

    准备

    掌握 Golang 的基础语法:推荐阅读谢大的《Go Web 编程》

    安装 gRPC / protobuf

    go get -u google.golang.org/grpc# 安装 gRPC 框架go get -u github.com/golang/protobuf/protoc-gen-go# 安装 Go 版本的 protobuf 编译器

    微服务

    我们要写什么项目?

    我们要搭建一个港口的货物管理平台。本项目以微服务的架构开发,整体简单且概念通用。闲话不多说让我们开始微服务之旅吧。

    微服务是什么?

    在传统的软件开发中,整个应用的代码都组织在一个单一的代码库,一般会有以下拆分代码的形式:

    • 按照特征做拆分:如 MVC 模式
    • 按照功能做拆分:在更大的项目中可能会将代码封装在处理不同业务的包中,包内部可能会再做拆分

    不管怎么拆分,最终二者的代码都会集中在一个库中进行开发和管理,可参考:谷歌的单一代码库管理

    微服务是上述第二种拆分方式的拓展,按功能将代码拆分成几个包,都是可独立运行的单一代码库。区别如下:

    a01eab54799823d5732271ce13fb8cd6.png

    微服务有哪些优势?

    降低复杂性

    将整个应用的代码按功能对应拆分为小且独立的微服务代码库,这不禁让人联想到 Unix 哲学:Do One Thing and Do It Well,在传统单一代码库的应用中,模块之间是紧耦合且边界模糊的,随着产品不断迭代,代码的开发和维护将变得更为复杂,潜在的 bug 和漏洞也会越来越多。

    提高扩展性

    在项目开发中,可能有一部分代码会在多个模块中频繁的被用到,这种复用性很高的模块常常会抽离出来作为公共代码库使用,比如验证模块,当它要扩展功能(添加短信验证码登录等)时,单一代码库的规模只增不减, 整个应用还需重新部署。在微服务架构中,验证模块可作为单个服务独立出来,能独立运行、测试和部署。

    遵循微服务拆分代码的理念,能大大降低模块间的耦合性,横向扩展也会容易许多,正适合当下云计算的高性能、高可用和分布式的开发环境。

    Nginx 有一系列文章来探讨微服务的许多概念,可 点此阅读

    使用 Golang 的好处?

    微服务是一种架构理念而不是具体的框架项目,许多编程语言都可以实现,但有的语言对微服务开发具备天生的优势,Golang 便是其中之一

    Golang 本身十分轻量级,运行效率极高,同时对并发编程有着原生的支持,从而能更好的利用多核处理器。内置 net 标准库对网络开发的支持也十分完善。可参考谢大的短文:Go 语言的优势

    此外,Golang 社区有一个很棒的开源微服务框架 go-mirco,我们在下一节会用到。

    Protobuf 与 gRPC

    在传统应用的单一代码库中,各模块间可直接相互调用函数。但在微服务架构中,由于每个服务对应的代码库是独立运行的,无法直接调用,彼此间的通信就是个大问题,解决方案有 2 个:

    JSON 或 XML 协议的 API

    微服务之间可使用基于 HTTP 的 JSON 或 XML 协议进行通信:服务 A 与服务 B 进行通信前,A 必须把要传递的数据 encode 成 JSON / XML 格式,再以字符串的形式传递给 B,B 接收到数据需要 decode 后才能在代码中使用:

    • 优点:数据易读,使用便捷,是与浏览器交互必选的协议
    • 缺点:在数据量大的情况下 encode、decode 的开销随之变大,多余的字段信息导致传输成本更高

    RPC 协议的 API

    下边的 JSON 数据就使用 description、weight 等元数据来描述数据本身的意义,在 Browser / Server 架构中用得很多,以方便浏览器解析:

    { "description": "This is a test consignment
    展开全文
  • go-zero 文件服务go-zero本身支持文件服务,但是我们需要写相关的handler文件,本文目的在于不写任何一个和...你可能需要阅读golang微服务框架go-zero系列-1:在go-zero中使用XormV2golang微服务框架go-zero系列-2:在g...

    go-zero 文件服务

    go-zero本身支持文件服务,但是我们需要写相关的handler文件,本文目的在于

    • 不写任何一个和文件相关的handler

    • 如果有新的文件,直接把文件模板到某个特定目录就好,不要动任何go代码

    需求在这里,开撸吧

    在代码开始前,你可能需要阅读

    golang微服务框架go-zero系列-1:在go-zero中使用XormV2
    golang微服务框架go-zero系列-2:在go-zero中使用jwt-token鉴权实践
    golang微服务框架go-zero系列-3:扩展go-zero,使之支持html模板解析自动化

    注意

    微服务讲究资源分离,实际生产过程中尽量使用专业的文件服务器或者OSS等第三方存储平台

    file服务实现思路

    gin中有专门的static file服务封装,go-zero目前并没有提供。目前go-zero提供非常严格的路径匹配,如
    访问/asset/l1.jpg 将映射到 /asset/:1对应的handlerlv1/asset/l1/l2.jpg 将映射到 /asset/:1/:2对应的handlerlv2
    这有如下俩种情况

    映射指定路径到单个文件

    比如我们需要访问favourite.ico,系统指向./www/favourite.ico文件,代码如下

    //处理函数,传入文件地址
    func filehandler(filepath string) http.HandlerFunc {
    return func(w http.ResponseWriter, req *http.Request) {
    http.ServeFile(w, req, filepath)
    }
    }

    在router里面直接调用AddRoute方法添加单个路由

    func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {

    //这里直接添加单个
    engine.AddRoute(
    rest.Route{
    Method: http.MethodGet,
    Path: "/favourite.ico",
    Handler: filehandler("./www/favourite.ico"),
    })
    }

    映射指定目录并提供服务

    实际过程中我们需要对外暴露某一个目录,比如/assets/目录,该目录下存放一些资源文件如css,js,img

    tree /f
    +---assets| +---css| +---fonts| +---images| +---js| \---plugins| +---font-awesome| | +---css| | \---fonts| +---fontawesome| | +---css| | \---fonts| +---ionicons| | +---css| | \---fonts| +---jquery.contextmenu| | \---images| +---jquery.pin| | +---css| | \---images| +---jqueryui-1.12.1| | +---external| | | \---jquery| | \---images| \---swiper-4.5.3| +---css| \---js

    如果使用单个文件的方式来实现,肯定不合理,因为router会非常大,怎么解决这个问题?我们可以使用如下方法实现文件夹服务

    //
    func dirhandler(patern, filedir string) http.HandlerFunc {

    return func(w http.ResponseWriter, req *http.Request) {
    handler := http.StripPrefix(patern, http.FileServer(http.Dir(filedir)))
    handler.ServeHTTP(w, req)

    }
    }

    如上函数的核心是http.StripPrefix(patern, http.FileServer(http.Dir(filedir)))函数,这个函数的核心功能是将映patern格式映射到某一个目录filedir

    • patern:请求路径格式/assets/:1,/assets/:1/:2这种

    • filedir:映射对应的文件夹./assets/这种

    那么我们只需要构建多级文件访问格式和dirhandler的映射关系即可

    func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {

    //这里注册
    dirlevel := []string{":1", ":2", ":3", ":4", ":5", ":6", ":7", ":8"}
    patern := "/asset/"
    dirpath := "./assets/"
    for i := 1; i < len(dirlevel); i++ {
    path := prefix + strings.Join(dirlevel[:i], "/")
    //最后生成 /asset
    engine.AddRoute(
    rest.Route{
    Method: http.MethodGet,
    Path: path,
    Handler: dirhandler(patern,dirpath),
    })

    logx.Infof("register dir %s %s", path,dirpath)
    }
    }

    404

    404可以在main函数中配置

    rt := router.NewPatRouter()
    rt.SetNotFoundHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    //这里内容可以定制
    w.Write([]byte("服务器开小差了,这里可定制"))
    }))
    server := rest.MustNewServer(c.RestConf, rest.WithRouter(rt))

    此时请求http://127.0.0.1:8888/hello,系统响应服务器开小差了,这里可定制

    测试

    启动系统后运行

    E:\workspace@go\gozero\file>go run file.go
    2020/09/05 20:18:24 {"@timestamp":"2020-09-05T20:18:24.682+08","level":"info","content":"{{{file-api { console logs info false 0 100} pro { 0 }} 0.0.0.0 8081 false 10000 1048576 3000 900 {false 0s []}} [/asset/=./assets]}"}
    {"@timestamp":"2020-09-05T20:18:24.682+08","level":"info","content":"register dir /asset/:1 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.683+08","level":"info","content":"register dir /asset/:1/:2 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.683+08","level":"info","content":"register dir /asset/:1/:2/:3 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.683+08","level":"info","content":"register dir /asset/:1/:2/:3/:4 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.697+08","level":"info","content":"register dir /asset/:1/:2/:3/:4/:5 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.697+08","level":"info","content":"register dir /asset/:1/:2/:3/:4/:5/:6 ./assets"}
    {"@timestamp":"2020-09-05T20:18:24.698+08","level":"info","content":"register dir /asset/:1/:2/:3/:4/:5/:6/:7 ./assets"}

    访问系统都能正常响应

    http://127.0.0.1:8888/asset/images/avatar.jpghttp://127.0.0.1:8888/asset/js/test.jshttp://127.0.0.1:8888/asset/js/lv2/test.js

    注意,请求的是/asset/** 不是/assets/**

    思考一下

    我们可以在NotFoundHandler中根据req.URL.path来实现文件服务,如何实现呢?

    本文代码获取

    关注公众号betaidea 输入file即可获得本文相关代码
    关注公众号betaidea 输入html即可获得html解析相关代码
    关注公众号betaidea 输入jwt即可获得gozero集成jwt-token相关代码
    关注公众号betaidea 输入gozero即可gozero入门代码

    广而告之

    送福利了uniapp用户福音来啦!
    历经数十万用户考验,我们的客服系统终于对外提供服务了。
    你还在为商城接入客服烦恼吗?只需一行代码,即可接入啦!!
    只需一行代码!!!!

    /*kefu.vue*/<template><view><IdeaKefu :siteid="siteId"  >IdeaKefu>view>template><script>
    import IdeaKefu from "@/components/idea-kefu/idea-kefu.vue"
    export default {
    components:{
    IdeaKefu
    },
    data() {
    return {
    siteId:2
    }
    }
    }

    效果杠杠的5ad2f712683a7188b7743ace69b56d23.png

    开发文档地址
    http://kefu.techidea8.com/html/wiki/

    展开全文
  • Golang 微服务教程(二) 发表于 2018-05-12 | 阅读次数: | 字数统计: 3,763原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。本节未细致介绍 Docker,更多可参考:《第一本Docker书 修订版》前言在上...

    Golang 微服务教程(二)

    发表于 2018-05-12 | 阅读次数: | 字数统计: 3,763

    原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。

    本节未细致介绍 Docker,更多可参考:《第一本Docker书 修订版》

    前言

    在上一篇中,我们使用 gRPC 初步实现了我们的微服务,本节将 Docker 化该微服务并引入 go-micro 框架代替 gRPC 简化服务的实现。

    Docker

    背景

    占据着云计算的优势,微服务架构越来越流行,同时它的云端分布式的运行环境也对我们的开发、测试和部署提出了很高的要求,容器(container)便是一项解决方案。

    在传统软件开发中,应用直接部署在环境和依赖都准备好的系统上,或在一台物理服务器上部署在由 Chef 或 Puppet 管理的虚拟集群里。这种部署方案不利于横向扩展,比如要部署多台物理服务器,需要都安装相同的依赖,再部署,很是麻烦。

    vagrant 这类管理多个虚拟机的工具,虽然使项目的部署更为遍历,但每个虚拟机都运行有一个完整的操作系统,十分耗费宿主主机的资源,并不适合微服务的开发和部署。

    容器

    特性

    容器 是精简版的操作系统,但并不运行一个 kernel 或系统底层相关的驱动,它只包含一些 run-time 必需的库,多个容器共享宿主主机的 kernel,多个容器之间相互隔离,互补影响。可参考:Redhat topic

    优势

    容器的运行环境只包含代码所需要的依赖,而不是使用完整的操作系统包含一大堆不需要的组件。此外,容器本身的体积相比虚拟机是比较小的,比如对比 ubuntu 16.04 优势不言而喻:

    • 虚拟机大小
    ae99543377bd12470b31fb9e8a630408.png
    • 容器镜像大小
    8f8bca269c56946c5c62a27dabf93499.png

    Docker 与容器

    一般人会认为容器技术就是 Docker,实则不然,Docker 只是容器技术的一种实现,因为其操作简便且学习门槛低,所以如此流行。

    Docker 化微服务

    Dockerfile

    创建微服务部署的 Dockerfile

    # 若运行环境是 Linux 则需把 alpine 换成 debian# 使用最新版 alpine 作为基础镜像FROM alpine:latest# 在容器的根目录下创建 app 目录RUN mkdir /app# 将工作目录切换到 /app 下WORKDIR /app# 将微服务的服务端运行文件拷贝到 /app 下ADD consignment-service /app/consignment-service# 运行服务端CMD ["./consignment-service"]

    alpine 是一个超轻量级 Linux 发行版本,专为 Docker 中 Web 应用而生。它能保证绝大多数 web 应用可以正常运行,即使它只包含必要的 run-time 文件和依赖,镜像大小只有 4 MB,相比上边 Ubuntu16.4 节约了 99.7% 的空间:

    1239c1c4e141683f2ea0bc65284d6f7f.png

    由于 docker 镜像的超轻量级,在上边部署和运行微服务耗费的资源是很小的。

    编译项目

    为了在 alpine 上运行我们的微服务,向 Makefile 追加命令:

    build:...# 告知 Go 编译器生成二进制文件的目标环境:amd64 CPU 的 Linux 系统GOOS=linux GOARCH=amd64 go build# 根据当前目录下的 Dockerfile 生成名为 consignment-service 的镜像docker build -t consignment-service .

    需手动指定 GOOS 和 GOARCH 的值,否则在 macOS 上编译出的文件是无法在 alpine 容器中运行的。

    其中 docker build 将程序的执行文件 consignment-service 及其所需的 run-time 环境打包成了一个镜像,以后在 docker 中直接 run 镜像即可启动该微服务。

    你可以把你的镜像分享到 DockerHub,二者的关系类比 npm 与 nodejs、composer 与 PHP,去 DockerHub 瞧一瞧,会发现很多优秀的开源软件都已 Docker 化,参考演讲:Willy Wonka of Containers

    关于 Docker 构建镜像的细节,请参考书籍《第一本 Docker 书》第四章

    运行 Docker 化后的微服务

    继续在 Makefile 中追加命令:

    build:...run:# 在 Docker alpine 容器的 50001 端口上运行 consignment-service 服务# 可添加 -d 参数将微服务放到后台运行docker run -p 50051:50051 consignment-service

    由于 Docker 有自己独立的网络层,所以需要指定将容器的端口映射到本机的那个端口,使用 -p 参数即可指定,比如 -p 8080:50051 是将容器 50051端口映射到本机 8080 端口,注意顺序是反的。更多参考:Docker 文档

    现在运行 make build && make run 即可在 docker 中运行我们的微服务,此时在本机执行微服务的客户端代码,将成功调用 docker 中的微服务:

    4857299a38c1d35c90d6feaf23285c1c.gif

    Go-micro

    为什么不继续使用 gRPC ?

    管理麻烦

    在客户端代码(consignment-cli/cli.go)中,我们手动指定了服务端的地址和端口,在本地修改不是很麻烦。但在生产环境中,各服务可能不在同一台主机上(分布式独立运行),其中任一服务重新部署后 IP 或运行的端口发生变化,其他服务将无法再调用它。如果你有很多个服务,彼此指定 IP 和端口来相互调用,那管理起来很麻烦

    服务发现

    为解决服务间的调用问题,服务发现(service discovery)出现了,它作为一个注册中心会记录每个微服务的 IP 和端口,各微服务上线时会在它那注册,下线时会注销,其他服务可通过名字或 ID 找到该服务类比门面模式。

    为不重复造轮子,我们直接使用实现了服务注册的 go-micro 框架。

    安装

    go get -u github.com/micro/protobuf/protogo get -u github.com/micro/protobuf/protoc-gen-go

    使用 go-micro 自己的编译器插件,在 Makefile 中修改 protoc 命令:

    build:# 不再使用 grpc 插件protoc -I. --go_out=plugins=micro:$(GOPATH)/src/shippy/consignment-service proto/consignment/consignment.proto

    服务端使用 go-micro

    你会发现重新生成的 consignment.pb.go 大有不同。修改服务端代码 main.go 使用 go-micro

    package mainimport (pb "shippy/consignment-service/proto/consignment""context""log""github.com/micro/go-micro") 仓库接口//type IRepository interface {Create(consignment *pb.Consignment) (*pb.Consignment, error) // 存放新货物GetAll() []*pb.Consignment // 获取仓库中所有的货物} 我们存放多批货物的仓库,实现了 IRepository 接口//type Repository struct {consignments []*pb.Consignment}func (repo *Repository) Create(consignment *pb.Consignment) (*pb.Consignment, error) {repo.consignments = append(repo.consignments, consignment)return consignment, nil}func (repo *Repository) GetAll() []*pb.Consignment {return repo.consignments} 定义微服务//type service struct {repo Repository} 实现 consignment.pb.go 中的 ShippingServiceHandler 接口// 使 service 作为 gRPC 的服务端 托运新的货物// func (s *service) CreateConsignment(ctx context.Context, req *pb.Consignment) (*pb.Response, error) {func (s *service) CreateConsignment(ctx context.Context, req *pb.Consignment, resp *pb.Response) error {// 接收承运的货物consignment, err := s.repo.Create(req)if err != nil {return err}resp = &pb.Response{Created: true, Consignment: consignment}return nil}// 获取目前所有托运的货物// func (s *service) GetConsignments(ctx context.Context, req *pb.GetRequest) (*pb.Response, error) {func (s *service) GetConsignments(ctx context.Context, req *pb.GetRequest, resp *pb.Response) error {allConsignments := s.repo.GetAll()resp = &pb.Response{Consignments: allConsignments}return nil}func main() {server := micro.NewService(// 必须和 consignment.proto 中的 package 一致micro.Name("go.micro.srv.consignment"),micro.Version("latest"),)// 解析命令行参数server.Init()repo := Repository{}pb.RegisterShippingServiceHandler(server.Server(), &service{repo})if err := server.Run(); err != nil {log.Fatalf("failed to serve: %v
    展开全文
  • golang微服务笔记.pdf

    2019-09-29 11:15:27
    golang微服务架构技术
  • golang 微服务

    2019-09-18 18:37:27
    我很懒,直接贴地砖:http://btfak.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/2016/03/28/go-micro/ 转载于:https://my.os...
  • tutor-rest-api:golang微服务
  • golang-docker-build:用于golang微服务的Docker构建
  • MicroserviceGoBlog:基于gRPC实现的golang微服务博客
  • 主要介绍了golang 微服务之gRPC与Protobuf的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Golang 微服务教程

    2020-03-26 23:27:54
    Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consignment-service 的简洁版。在接下来的第 2~10 节文章中,我们会陆续...
  • Golang微服务教程

    2019-05-26 16:45:41
    转自:https://segmentfault.com/a/1190000015135650?utm_campaign=studygolang.com&... 前言 系列概览 《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务...
  • import ( "github.... }, func(db *gorm.DB) { usermigration.AutoMigrate(db)//数据库迁移 migration.Migration(db) }) defer db.ConnClose() } golang gin框架微服务一键搭建,为您很好的服务 文章来源 :...
  • 微服务特性是轻量级跨平台和跨语言的服务,也列举了比较了集中微服务通信的手段的利弊,本文将通过RPC通信的方式实现一个增删查Redis的轻量级微服务示例,大部分内容翻译自文章《Microservice in golang, using ...
  • { gin_run.GinRun(func(group *gin.RouterGroup) { //回调函数 gin路由添加 router.Router(group) }, func(db *gorm.DB) { //自动创建表 migration.Migration(db) }) } golang gin框架微服务一键搭建,...
  • Golang微服务 微服务架构由一组小型自治服务组成。 每个服务都是独立的,应实现单个业务功能。 下面是设计和实现使用微服务的例子: 1.电影微服务示例架构 1.1。 一般的微服务认证流程 条款 描述 第三应用服务 想要...
  • golang微服务网关

    2021-03-16 22:14:17
    为什么要学习golang微服务网关? 1.亿级流量的网站框架中,网关是一个核心。 它作为接入层承载了流量的转发、负载均衡、服务限流、熔断降级等功能。 如果一个流量小的单机服务可能不需要网关,但是服务要想横向...
  • 10 maxOpenConns: 10 logMode: true ... 4 uploaddir: 5 domainName: 6 ssl: 7 注意请将配置文件放置在根目录 golang gin框架微服务一键搭建,为您很好的服务 文章来源 :http://blog.zngue.com/post/59bd5a2b26.html
  • 强大的golang微服务api网关。 特征 登录/登出 查询/更新管理员信息 CURD Http / Tcp / Grpc服务 CURD应用 仪表板流量/百分比/统计 限速器中间件 断路器中间件 托多斯 迁移架构 Websocket代理服务器 ...
  • 公交车 强大,快速,更好使用和简单的Golang微服务框架
  • Golang 微服务教程(三) 发表于 2018-05-22 | 阅读次数: | 字数统计: 5,102原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。本文完整代码:GitHub在上节中,我们使用 go-micro 重新实现了微服务并...
  • 今天的演讲主题是:golang 微服务架构与治理实战。次微服务架构目前已经成为主流的互联网技术架构方案,深知科技在创业初始阶段就采用了微服务架构来开发和部署线上服务,经过一年多的实战演变,目前我们十几人的...
  • 为什么使用go-zero可以有第三个选择golang圈子不大,微服务框架框架屈指可数:除了go-micro、go-kit,几乎没有其他选择。go-zero为此提供第三个可能。go-micro 对webapi支持并不友好,需要运行micro指令,难以定制创业者...
  • 1.前言背景工作由PHP转Golang,最近在用GO开发微服务后台...技术栈Golang(开发语言)etcd (分布式键值数据库)docker(容器)mysql,redis (数据库)微服务微服务是什么概念,一般传统开发中,整个应用都是构建在一个代码...
  • golang微服务例子

    2018-10-03 19:42:56
    里面是微服务 使用golang开发的小例子,可供初学者边学边联系
  • 本文完整代码:GitHub上节引入 user-service 微服务并在 Postgres 中存储了用户数据,包括明文密码。本节将对密码进行安全的加密处理,并使用唯一的 token 来在各微服务之间识别用户。在开始之前,需要手动运行...
  • golang圈子不大,微服务框架框架屈指可数:除了go-micro、go-kit,几乎没有其他选择。go-zero为此提供第三个可能。 go-micro 对webapi支持并不友好,需要运行micro指令,难以定制 创业产品需要一款支持业务成长的框架 ...
  • golang微服务框架go-zero系列-4:go-zero文件服务 go-zero本身支持文件服务,但是我们需要写相关的handler文件,本文目的在于 不写任何一个和文件相关的handler 如果有新的文件,直接把文件模板到某个特定目录就好,不要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,159
精华内容 463
关键字:

golang微服务