美文网首页Go - Micro微服务
Go - Micro微服务框架实践 - 工具包(四)

Go - Micro微服务框架实践 - 工具包(四)

作者: 承诺一时的华丽 | 来源:发表于2018-12-18 09:29 被阅读9次

    Micro Toolkit

    Micro是云原生开发的工具包。它可以帮助您构建面向未来的应用程序平台和服务。

    概观

    Micro解决了构建云原生系统的关键要求。它采用微服务架构模式并将其转换为一组工具,充当可扩展平台的构建块。Micro处理分布式系统的复杂性,并提供开发人员已经理解的简单抽象。

    技术在不断发展。基础架构堆栈总是在变化。Micro是一个可插拔的工具包,可以解决这些问题。插入任何堆栈或底层技术。使用micro构建面向未来的系统。

    特征

    该工具包由以下功能组成:

    • API网关:使用服务发现进行动态请求路由的单个入口点。API网关允许您在后端构建可扩展的微服务架构,并在一个位置整合服务公共http api。micro api通过发现和可插拔处理程序提供强大的路由,以提供http,grpc,websockets,发布事件等。

    • Slack bot:一个在您的平台上运行的机器人,让您可以从Slack本身管理您的应用程序。微型机器人支持ChatOps,使您能够通过消息传递与团队一起完成所有工作。它还包括创建松弛命令作为动态发现的服务的能力。

    • 命令行界面:用于直接从终端描述,查询和与您的平台和服务交互的CLI。CLI为您提供了您希望了解微服务发生情况的所有命令。它还包括一个交互模式。

    • 服务模板:生成新的服务模板以快速入门。Micro提供用于编写​​微服务的预定义模板。
      始终以相同的方式开始,构建相同的服务以提高工作效率。

    • Web仪表板: Web仪表板允许您浏览服务,描述其端点,请求和响应格式,甚至可以直接查询它们。仪表板还包含一个内置的CLI体验,适用于想要即时进入终端的开发人员。

    入门

    安装Micro

    go get -u github.com/micro/micro
    

    或者通过Docker

    docker pull microhq/micro
    

    依赖

    微工具包有两个依赖项:

    服务发现

    服务发现用于名称解析,路由和集中元数据。
    Micro使用go-micro注册表进行服务发现。Consul是默认注册表。

    Consul

    安装并运行Consul

    # install
    brew install consul
    
    # run
    consul agent -dev
    

    mDNS

    mDNS是用于零依赖性服务发现的内置注册表。

    为任何命令传递--registry=mdns或设置env varMICRO_REGISTRY=mdns

    # Use flag
    micro --registry=mdns list services
    
    # Use env var
    MICRO_REGISTRY=mdns micro list services`
    

    有关更多服务发现插件,请参阅go-plugins

    Protobuf

    Protobuf用于代码生成。它减少了需要编写的样板代码量。

    # install protobuf
    brew install protobuf
    
    # install protoc-gen-go
    go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
    
    # install protoc-gen-micro
    go get -u github.com/micro/protoc-gen-micro
    

    有关详细信息,请参阅protoc-gen-micro

    写一个服务

    Micro包括新模板生成以加速编写应用程序
    有关编写服务的完整详细信息,请参阅go-micro

    生成模板

    在这里,我们将使用快速生成示例模板 micro new
    指定相对于$ GOPATH的路径

    micro new github.com/micro/example
    

    该命令将输出

    example/
        Dockerfile  # A template docker file
        README.md   # A readme with command used
        handler/    # Example rpc handler
        main.go     # The main Go program
        proto/      # Protobuf directory
        subscriber/ # Example pubsub Subscriber
    

    使用编译protobuf代码 protoc

    protoc --proto_path=. --micro_out=. --go_out=. proto/example/example.proto
    

    现在像任何其他go应用程序一样运行它

    go run main.go
    

    例子

    现在我们有一个使用micro new模板生成的运行应用程序,让我们测试一下。

    列出服务

    每个服务都注册了发现,因此我们应该能够找到它。

    micro list services
    

    产量

    consul
    go.micro.srv.example
    topic:topic.go.micro.srv.example
    

    示例应用已使用完全限定的域名注册 go.micro.srv.example

    获得服务

    每个服务都使用唯一的ID,地址和元数据进行注册。

    micro get service go.micro.srv.example
    

    产量

    service  go.micro.srv.example
    
    version latest
    
    ID  Address Port    Metadata
    go.micro.srv.example-437d1277-303b-11e8-9be9-f40f242f6897   192.168.1.65    53545   transport=http,broker=http,server=rpc,registry=consul
    
    Endpoint: Example.Call
    Metadata: stream=false
    
    Request: {
        name string
    }
    
    Response: {
        msg string
    }
    
    Endpoint: Example.PingPong
    Metadata: stream=true
    
    Request: {}
    
    Response: {}
    
    Endpoint: Example.Stream
    Metadata: stream=true
    
    Request: {}
    
    Response: {}
    
    Endpoint: Func
    Metadata: subscriber=true,topic=topic.go.micro.srv.example
    
    Request: {
        say string
    }
    
    Response: {}
    
    Endpoint: Example.Handle
    Metadata: subscriber=true,topic=topic.go.micro.srv.example
    
    Request: {
        say string
    }
    
    Response: {}
    
    

    致电服务

    通过CLI进行RPC调用。查询以json的形式发送。

    micro call go.micro.srv.example Example.Call '{"name": "John"}'
    

    产量

    {
        "msg": "Hello John"
    }
    

    查看cli doc以获取更多信息。

    现在让我们通过HTTP测试服务。

    运行API

    micro api是一个http网关,可动态路由到后端服务

    让我们运行它,以便我们可以查询示例服务。

    MICRO_API_HANDLER=rpc \
    MICRO_API_NAMESPACE=go.micro.srv \ 
    micro api
    

    一些信息:

    • MICRO_API_HANDLER 设置http处理程序
    • MICRO_API_NAMESPACE 设置服务名称空间

    调用API

    使用json向api发出POST请求

    curl -XPOST -H 'Content-Type: application/json' -d '{"name": "John"}' http://localhost:8080/example/call
    

    产量

    {"msg":"Hello John"}
    

    有关详细信息,请参阅api doc

    插件

    Micro是基于go-micro构建的,使其成为可插拔的工具包。

    Go-micro为可以换出的分布式系统基础设施提供抽象。

    可插拔功能

    可插拔的微观功能:

    • broker - pubsub消息代理
    • 注册表 - 服务发现
    • 选择器 - 客户端负载平衡
    • 传输 - 请求 - 响应或双向流
    • 客户端 - 管理上述功能的客户端
    • server - 管理上述功能的服务器

    go-plugins上找到插件

    使用插件

    只需将它们链接到一个单独的文件中即可集成go-micro插件

    创建一个plugins.go文件

    import (
        // etcd v3 registry
        _ "github.com/micro/go-plugins/registry/etcdv3"
        // nats transport
        _ "github.com/micro/go-plugins/transport/nats"
        // kafka broker
        _ "github.com/micro/go-plugins/broker/kafka"
    )
    

    建立二进制

    使用Go工具链重建micro二进制文件

    # For local use
    go build -i -o micro ./main.go ./plugins.go
    
    # For docker image
    CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -i -o micro ./main.go ./plugins.go
    

    启用插件

    使用命令行标志或env变量启用插件

    # flags
    micro --registry=etcdv3 --transport=nats --broker=kafka [command]
    
    # env vars
    MICRO_REGISTRY=etcdv3 MICRO_TRANSPORT=nats MICRO_BROKER=kafka micro [command]
    

    相关文章

      网友评论

        本文标题:Go - Micro微服务框架实践 - 工具包(四)

        本文链接:https://www.haomeiwen.com/subject/bzfghqtx.html