精华内容
下载资源
问答
  • This is a template for doing go-micro development using GitLab. It's based on the helloworld Go Micro template. Reference links GitLab CI Documentation Go Micro Overview Go Micro Toolkit Getting ...
  • Micro是运行时工具集,而GoMicro则是后端服务框架。 Micro 如下图所示,micro类似于中间层的作用,手机,web等通过micro中相应的API,BOT,WEB等工具,调用gomicro框架中的服务 Micro Api主要功能在于将http请求...
    1. Micro是运行时工具集,而GoMicro则是后端服务框架。

    Micro

    1. 如下图所示,micro类似于中间层的作用,手机,web等通过micro中相应的API,BOT,WEB等工具,调用gomicro框架中的服务
      在这里插入图片描述
    2. Micro Api主要功能在于将http请求转向到内部服务。即通过Micro Api将内部服务暴露给外部http请求。 List item
    3. Micro Proxy可以让服务客户端直接调用服务。与Mirco API不同的是,api主要是将rpc转成http形式给外部,而proxy则是只能使用rpc形式在这里插入图片描述

    Go-Mirco

    1. 一个具体实例化的服务分为客户端和服务端。其中客户端主要用于发送RPC请求和广播,而服务端主要用于接收RPC请求和广播。
      在这里插入图片描述
    2. 需要五个组件来支撑收发rpc,即broker(异步通信组件)codec(数据编码组件)registry(服务注册组件)selector(客户端均衡器)transport(同步通信组件)
    3. 其中,codec用于将客户端请求的数据编码后给服务端,服务端收到消息后再解码得到数据进行处理。
    4. registry将服务进行注册(注册到注册中心),selector和registry一起协作,获取所要调用的服务的具体ip,从而发送请求。

    各个组件的协作关系在这里插入图片描述

    1. 服务层在启动后会启动一个服务,服务会去调用register,将服务到注册中心进行注册。
    2. 之后客户端需要服务的时候,会先去启动selector,selector去registry中查询注册的服务,如果找不到则去注册中心处查找。
    3. 找到服务后会将相关信息换地给transport,transport将请求数据通过codec编码后传递到服务端,服务端反编码后处理数据。处理完后将数据编码后返回给客户端。
    4. broker则类似于上述的流程,不过中间又多了一层中间件。broker会将数据先给中间件(mq一类的),服务端从中间件获取推送的数据。
    展开全文
  • go-micro讲解--Go Micro编写微服务

    万次阅读 2018-07-07 10:53:09
    一、什么是go-micro Go Micro是一个插件化的基础框架,基于此可以构建微服务。...Go Micro是:一个用Golang编写的包一系列插件化的接口定义基于RPcGo Micro为下面的模块定义了接口:服务发现编解...

    一、什么是go-micro

    •  Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。我们一步步深入下去。

    Go Micro是:

    • 一个用Golang编写的包
    • 一系列插件化的接口定义
    • 基于RPc
    • Go Micro为下面的模块定义了接口:
    1. 服务发现
    2. 编解码
    3. 服务端、客户端
    4. 订阅、发布消息

    二、使用go-micro编写微服务

    安装protoc

    1.github上下载一个cpp包:https://github.com/google/protobuf/releases make make install安装即可
    2.protoc-gen-go
    go get -u github.com/golang/protobuf/protoc-gen-go
    3.安装protoc-gen-micro
    go get github.com/micro/protoc-gen-micro

    安装Consul

    micro默认使用consul作为微服务发现

    Consul is used as the default service discovery system.
    
    Discovery is pluggable. Find plugins for etcd, kubernetes, zookeeper and more in the micro/go-plugins repo.
    

    https://www.consul.io/intro/getting-started/install.html

    启动cansul方式参考如下:注意修改自己-data-dir目录路劲

    consul agent -server  -node chenxun-server -bind=192.168.199.62  -data-dir D:\工作文件备份\consul_1.0.0_windows_amd64\tmp1  -ui
    
    #  consul agent -server -bootstrap-expect 1 -node chenxun-server -bind=192.168.199.62 -data-dir c:/tmp
    
    # ./consul agent -server -bootstrap-expect 1  -data-dir /tmp/consul -node=chenxun-server -bind=192.168.145.130 -ui
    
    

    准备proto文件: 文件保存为chenxun.proto,名称随便写,在实际项目中根据项目写就好了

    chenxun.proto

    syntax = "proto3";
    
    service Greeter {
    	rpc Hello(HelloRequest) returns (HelloResponse) {}
    }
    
    message HelloRequest {
    	string name = 1;
    }
    
    message HelloResponse {
    	string greeting = 2;
    }
    

    Generate the proto:

    protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. chenxun.proto
    

    执行命令后能看到下面文件:

    -rw-r--r--.  1 root  root      2441 Jul  7 10:38 chenxun.micro.go
    -rw-r--r--.  1 root  root      2914 Jul  7 10:38 chenxun.pb.go
    -rw-r--r--.  1 root  root       185 Jul  6 11:36 chenxun.proto
    
    

    比如我把这三个文件放在gopath路劲下面的src目录下面的mygoproject/gomirco

    那么在import的时候写: import "mygoproject/gomirco"

    Service端代码:

    package main
    
    import (
    	"context"
    	"fmt"
    
    	micro "github.com/micro/go-micro"
    	proto "mygoproject/gomirco" //这里写你的proto文件放置路劲
    )
    
    type Greeter struct{}
    
    func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {
    	rsp.Greeting = "Hello " + req.Name
    	return nil
    }
    
    func main() {
    	// Create a new service. Optionally include some options here.
    	service := micro.NewService(
    		micro.Name("greeter"),
    	)
    
    	// Init will parse the command line flags.
    	service.Init()
    
    	// Register handler
    	proto.RegisterGreeterHandler(service.Server(), new(Greeter))
    
    	// Run the server
    	if err := service.Run(); err != nil {
    		fmt.Println(err)
    	}
    }
    

    Client端代码:

    package main
    
    import (
    	"context"
    	"fmt"
    
    	micro "github.com/micro/go-micro"
    	proto "mygoproject/gomirco" //这里写你的proto文件放置路劲
    )
    
    
    func main() {
    	// Create a new service. Optionally include some options here.
    	service := micro.NewService(micro.Name("greeter.client"))
    	service.Init()
    
    	// Create new greeter client
    	greeter := proto.NewGreeterService("greeter", service.Client())
    
    	// Call the greeter
    	rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"})
    	if err != nil {
    		fmt.Println(err)
    	}
    
    	// Print response
    	fmt.Println(rsp.Greeting)
    }
    

    运行service:

    go run examples/service/main.go
    

    运行client:

    go run examples/client/main.go
    展开全文
  • Go Micro是用于分布式系统开发的框架。 总览 Go Micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通信。 Micro哲学是可插拔体系结构的默认设置。 我们提供默认设置,以帮助您快速入门,但所有内容都可以...
  • 文章目录目录Go Micro Go Micro Go Micro 是一个可插拔的 RPC 框架,提供了以下功能: 服务发现:程序自动注册到服务发现系统。 负载均衡:它提供了客户端负载均衡。 同步通信:提供 Request/Response Transport。...

    目录

    文章目录

    Go Micro

    在这里插入图片描述

    Go Micro 是一个可插拔的 RPC 框架,提供了以下功能:

    • 服务发现:程序自动注册到服务发现系统。
    • 负载均衡:它提供了客户端负载均衡。
    • 同步通信:提供 Request/Response Transport。
    • 异步通信:具有内置的发布和订阅功能。
    • 消息编码:可以利用 header 中 Content-Type 进行编码和解码
    • RPC 客户端/服务器端:利用上述功能并提供构建微服务需要的接口。

    Go Micro 架构由三层组成:

    1. 服务层。
    2. C/S 模型层:Serrver 用于编写服务的块组成;而 Client 为我们提供接口,向 Server Model 中编写的服务发出请求。
    3. 第三层有以下类型的插件:
    • Broker:在异步通信中为 Message Broker(消息代理)提供接口。
    • Codec:用于加密或解密消息。
    • Registry:提供服务搜索功能。
    • Selector:在 Register 上构建了负载均衡。
    • Transport:是服务与服务之间进行同步 Request/Response 的通信接口。

    它还提供了一个名为 Sidecar(边车)的功能。Sidecar 能够集成以 Golang 以外的语言编写的服务。它还为我们提供了 gRPC 编码/解码、服务注册和 HTTP 请求处理。

    展开全文
  • Go Micro框架

    千次阅读 2019-04-29 15:42:45
    Go Micro是一个微服务开发框架。Go Micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通信。 特点 自动服务注册与名称解析:服务发现是微服务开发中的核心,用于解析服务名与地址。consul是Go Micro默认的...

    Go Micro是一个微服务开发框架。Go Micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通信。

    特点

    • 自动服务注册与名称解析:服务发现是微服务开发中的核心,用于解析服务名与地址。consulGo Micro默认的服务发现注册中心。发现系统可插拔,其他插件像etcdkuberneteszookeeper
    • 负载均衡:在服务发现之上构建了负载均衡机制。使用随机处理过的哈希负载均衡机制来保证对服务请求颁布的均匀分布。
    • 消息编码:支持基于内容类型(content-type)动态编码消息。客户端和服务端会一起使用content-type格式来对Go进行无缝编/解码。content-type默认包含proto-rpcjson-rpc
    • Request/Response:RPC通信基于支持双向流的请求/响应方式,提供同步通信机制,请求发送到服务时,会自动解析,负载均衡,拨号,转成字节流。
    • 异步消息:发布订阅等功能内置在异步通信与事件驱动架构中,事件通知在微服务开发中处于核心位置。默认的消息传递使用点到点http/1.1,激活tls时则使用http2。
    • 可插拔接口:Go Micro为每个分布式系统抽象出接口,因此,Go Micro的接口都是可插拔的,允许其在运行时不可知的情况下仍可支持。

    编写服务

    服务原型

    微服务中有个关键需求点,就是接口的强定义。Micro使用protobuf来完成这个需求。以gRPC使用简介文章中的服务为例,定义Greeter处理器,它有一个Hello方法。它有HelloRequest入参对象以及HelloResponse出参对象,两个对象都有一个字符串类型的参数。
    helloworld.proto文件:

    syntax = "proto3";
    
    package main;
    
    service Greeter {
        rpc Hello (HelloRequest) returns (HelloResponse) {
        }
    }
    
    message HelloRequest {
        string name = 1;
    }
    
    message HelloResponse {
        string greeting = 2;
    }
    

    生成原型

    在定义好原型后,我们使用protoc以及micro的插件来编译它,micro插件可以帮助生成go micro需要的原型文件。

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

    执行完命令后,将会在当前目录下生成helloworld.pb.go文件和helloworld.micro.go文件。
    其中helloworld.micro.go文件中分别定义了Greeter服务的客户端API和服务端API,如下:

    ...
    // Client API for Greeter service
    type GreeterService interface {
    	Hello(ctx context.Context, in *HelloRequest, opts ...client.CallOption) (*HelloResponse, error)
    }
    
    // Server API for Greeter service
    type GreeterHandler interface {
    	Hello(context.Context, *HelloRequest, *HelloResponse) error
    }
    

    编写服务

    下方的代码是greeter服务的代码,它要实现下面的几个要求:

    1. 实现在GreeterHandler中定义的接口
    2. 初始化micro.Service
    3. 注册Greeter handler
    4. 运行服务

    greeter_servermicro.go文件内容:

    package main
    
    import (
    	"context"
    	"fmt"
    	"github.com/micro/go-micro"
    )
    
    type Greeter struct {
    }
    
    func (g *Greeter) Hello(ctx context.Context, req *HelloRequest, rsp *HelloResponse) error {
    	rsp.Greeting = "hello" + req.Name
    	return nil
    }
    
    func main() {
    	// 创建新的服务,这里可以传入其他选项
    	service := micro.NewService(micro.Name("greeter"))
    
    	// 初始化方法会解析命令行标识
    	service.Init()
    
    	// 注册处理器
    	err := RegisterGreeterHandler(service.Server(), new(Greeter))
    	if err != nil {
    		fmt.Println("failed to register a greeter handler: ", err)
    	}
    
    	// 运行服务
    	if err = service.Run(); err != nil {
    		fmt.Println("failed to run a service: ", err)
    	}
    }
    

    运行服务

    执行命令go run greeter_servermicro.go
    输出

    2019/04/29 13:39:41 Transport [http] Listening on [::]:54648
    2019/04/29 13:39:41 Broker [http] Connected to [::]:54649
    2019/04/29 13:39:41 Registry [mdns] Registering node: greeter-29622a6a-50b6-4ff9-b580-8ce1b7a52f5f
    

    定义客户端

    下面的客户端代码用来查询greeter服务,上面我们生成的proto原型文件中包含了客户端部分,这样可以减少模板代码量。
    greeter_clientmicro.go文件

    package main
    
    import (
    	"context"
    	"fmt"
    	"github.com/micro/go-micro"
    )
    
    func main() {
    	// 定义服务,可以传入其他可选参数
    	service := micro.NewService(micro.Name("greeter.client"))
    	service.Init()
    
    	// 创建新的客户端
    	greeter := NewGreeterService("greeter", service.Client())
    
    	// 调用greeter
    	rsp, err := greeter.Hello(context.TODO(), &HelloRequest{Name: "benben_2015"})
    	if err != nil {
    		fmt.Println("failed to execute a greeter: ", err)
    	}
    
    	// 打印响应请求
    	fmt.Println(rsp.Greeting)
    }
    

    运行客户端

    执行命令go run greeter_clientmicro.go
    输出

    hello benben_2015
    

    编写Function

    Go Micro包含了函数式编程模型。Function是指接收一次请求,执行后便退出的服务。
    greeter_funcmicro.go文件内容:

    package main
    
    import (
    	"context"
    	"fmt"
    	"github.com/micro/go-micro"
    )
    
    type Greeter struct {
    }
    
    func (g *Greeter) Hello(ctx context.Context, req *HelloRequest, rsp *HelloResponse) error {
    	rsp.Greeting = "hello" + req.Name
    	return nil
    }
    
    func main() {
    	// 创建新函数
    	fnc := micro.NewFunction(micro.Name("greeter"))
    
    	// 初始化命令行
    	fnc.Init()
    
    	// 注册handler
    	err := fnc.Handle(new(Greeter))
    	if err != nil {
    		fmt.Println("failed to register a handler: ", err)
    	}
    
    	// 运行服务
    	if err = fnc.Run(); err != nil {
    		fmt.Println("failed to run a service: ", err)
    	}
    }
    

    参考文章

    1. Go Micro
    展开全文
  • 在学习go语言之前,看了很多国内外大牛的博客,总结一下就是缺点是有的,但是他的优点也是...抽了些时间将go语言和goMicro做了一个入门了解。(里面肯定有不成熟的地方,欢迎指正)废话不多说开始例子。 整个学习过...
  • gomicro-grpc gomicro-grpc是一个基于git-micro框架开发的个人微服务项目,针对gomicro项目套件使用,封装比较优雅,API友好,API注释比较明确,具有快速灵活,容错方便等特点,让您快速了解go微服务项目
  • Go Micro 初探

    2020-02-17 23:56:32
    文章目录起步初探 Micro感谢 起步 在使用 go-micro 之前,我们需要...$ go get -u github.com/golang/protobuf/protoc-gen-go 然后安装 protoc,这是软件下载连接。我用的操作系统是 centos 7,因此下载的是:prot...
  • go micro微服务资料

    2020-10-28 21:26:45
    微服务从入门到实践 下面的内容主要汇总自【学院君】,这些文章条例清晰、步骤详细、明白易懂,在这里学到了之前浅尝辄止、不求甚解的东西,非常感谢!...基于 Go Micro 构建第一个微服务接口(新手建议跳过看下一篇
  • GO Micro 搭建 Consul服务发现集群实例
  • 获取protoc-gen-go(通过此可以直接生成go语言对应的编译代码) go get github.com/micro/protobuf/{proto,protoc-gen-go} 启动Consul(使用consul作为注册中心注册所有服务) docker run consul 编写greeter.pr
  • 服务发现,就是通过什么办法可以找到需要调用的服务的地址(ip和端口),因为只有拿到服务的地址,我们才可以连接...Go Micro的Register模块负责服务发现,Go Micro 框架以插件的形式内置了几种常用的服务发现组件,下...
  • Go Micro 入门笔记

    2017-05-04 11:02:00
    Writing microservices with Go ...Go语言实现 插件化 基于RPC Go Micro 提供的接口: 服务发现 编码 Client/Server 发布/订阅 Writing a service 1. Initialisation micro.Flags 2. Defining the API 使用protob...
  • 在学习go语言之前,看了很多国内外大牛的博客,总结一下就是缺点是有的,但是他的优点也是不可...抽了些时间将go语言和goMicro做了一个入门了解。(里面肯定有不成熟的地方,欢迎指正)废话不多说开始例子。 整个学...
  • go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务。 创建Proto文件 因为我们要做微服务,那么就一定有服务端和客户端,这两个端...
  • https://micro.mu/blog/2016/03/20/micro.htmlhttps://micro.mu/blog/2016/04/18/micro-architecture.htmlhttps://github.com/micro1、Micro是一个专注于简化分布式系统开发...go-micro - A pluggable Go RPC frame...
  • Go Micro Go Micro is a framework for distributed systems development. Overview Go Micro provides the core requirements for distributed systems development including RPC and Event driven ...
  • Go Micro v3版本安装

    2021-07-29 14:37:23
    1. 下载 go get github.com/micro/micro/v3 go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go ...命令行输入micro -v是否显示当前go-micro版本 .
  • 高微 gomicro是一个基于git-micro框架开发的个人微服务项目,封装比较优雅,API友好,子系统注释比较明确,具有快速灵活,容错方便等特点,让您快速了解go微服务项目
  • Go实践微服务 -- 服务发现 go-micro 搭建 Consul服务发现集群实例
  • Go Micro是一个用于分布式系统开发的插件式RPC框架
  • 使用go micro不仅可以开发传统模式的同步调用的微服务,也可以基于事件实现异步调用模式的微服务。 在基于事件的模式下,服务端和客户端可以通过事件进行通信,而不必等待另外一端完成调用,才能进行下一步的工作。 ...
  • 作业:grpc 远程调用。 服务端 grpc 初始一个 grpc 对象 注册服务 设置监听, 指定 IP、port 启动服务。---- serve() ...给 grpc.Dial() 传参2 : grpc.WithInsecure() ....go-mirco micro 简介 go-
  • 安装好上面的的两个micro依赖后,将依赖执行文件放入环境变量中(可以将其放入go的环境变量中,go环境本身需已经加入了环境变量) 3、下载go-micro支持插件  由于golang.org/x/net被墙了,所以需要设置代理访问  ...
  • 此处采用的是go1.14.15版本,因为1.15版本的话,micro会报错,因此回退到1.15一下的版本,就可正常使用,1.15版本怎么解决还没找到,不过网上看到一个解决方案,还未实践,先贴出来吧 该问题升级 go-micro 以及 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,207
精华内容 3,682
关键字:

gomicro