热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go_gomicro入门示例

Go_go-micro入门示例,Go语言社区,Golang程序员人脉社


title: Go_go-micro入门示例
categories: Go
tags: [go, 微服务, 框架, 记录]
date: 2019-09-28 02:07:17
comments: false

Go_go-micro入门示例


demo1

参考: Go Micro 入门指南 - https://erikjiang.github.io/2018/07/05/GoMicroGuide/

服务发现依赖项工具 Consul

首先 micro 这个框架需要且依赖于服务发现工具(service discovery),框架默认的服务发现工具是 Consul ,同时框架的插拔机制也可确保能够切换到其他的服务发现工具上,如Etcd、NATS等,详见 micro plugins

关于consul的安装与运行:

  • Linux

    $ brew install consul # 安装 $ consul agent -dev # 运行

  • windows

    • 下载地址: https://www.consul.io/downloads.html, 所在目录配置到 环境变量

安装依赖包

go get -v -u google.golang.org/grpc // gRPC go get -v -u github.com/golang/protobuf/protoc-gen-go // 安装protoc go插件 go get -v -u github.com/micro/go-micro // Micro 框架 go get -v -u github.com/micro/protoc-gen-micro // protoc micro插件, 用于通过.proto文件生成.micro.go代码文件 go get -v -u github.com/micro/micro // micro工具包

  • 其中有几个会生成可执行程序. micro.exe, protoc-gen-go.exe, protoc-gen-micro.exe (没错, 我是在 windows 中玩的)

  • 安装其他依赖, 不然在 run 下面的 service.go 时会报找不到这些包的错误.

    go get -v -u github.com/hashicorp/go-cleanhttp go get -v -u github.com/hashicorp/go-rootcerts go get -v -u github.com/hashicorp/memberlist go get -v -u github.com/hashicorp/serf/coordinate go get -v -u github.com/lucas-clemente/quic-go go get -v -u github.com/mitchellh/hashstructure go get -v -u github.com/mitchellh/mapstructure

创建 proto 文件. user.proto

syntax = "proto3"; service User { rpc Hello(Request) returns (Response) {} } message Request { string name = 1; } message Response { string msg = 1; }

然后生成 user.micro.gouser.pb.go 文件

F:a_link_workspacegoGoWinEnv_Test01srcGoMicro (master -> origin) λ protoc -I ./protos/ --go_out=protoc-gen-go:./proto_gen --micro_out=./proto_gen ./protos/user.proto

创建服务端代码. service.go

package main import ( "context" "fmt" proto "GoMicro/proto_gen" micro "github.com/micro/go-micro" ) type User struct{} func (u *User) Hello(ctx context.Context, req *proto.Request, res *proto.Response) error { res.Msg = "Hello " + req.Name return nil } func main() { service := micro.NewService( micro.Name("user"), ) service.Init() proto.RegisterUserHandler(service.Server(), new(User)) if err := service.Run(); err != nil { fmt.Println(err) } }

创建客户端代码. client.go

package main import ( "context" "fmt" proto "GoMicro/proto_gen" micro "github.com/micro/go-micro" ) func main() { service := micro.NewService(micro.Name("user.client")) service.Init() user := proto.NewUserService("user", service.Client()) res, err := user.Hello(context.TODO(), &proto.Request{Name: "World ^_^"}) if err != nil { fmt.Println(err) } fmt.Println(res.Msg) }

打开 consul

  1. 命令: consul agent -dev

    $ consul agent -dev ==> Starting Consul agent... Version: 'v1.6.1' Node ID: '700d980f-5e00-4595-c759-a54286dab099' Node name: 'DESKTOP-B3461GK' Datacenter: 'dc1' (Segment: '') Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

  2. 可以通过网页访问到. http://127.0.0.1:8500/ui

运行 服务端/客户端

  1. 启动服务端. go run service.go

    F:a_link_workspacegoGoWinEnv_Test01srcGoMicrotest001srv (master -> origin) λ go run service.go 2019/09/28 02:04:58 Transport [http] Listening on [::]:53802 2019/09/28 02:04:58 Broker [http] Connected to [::]:53803 2019/09/28 02:04:58 Registry [mdns] Registering node: user-d9a8a8db-28c6-424f-ab2a-843f80049cea

    • 此时刷新:http://127.0.0.1:8500/ui/ 页面会发现新服务user;这个暂时没有看到.
  2. 启动客户端. go run client.go. 会输出服务端返回的值

    F:a_link_workspacegoGoWinEnv_Test01srcGoMicrotest001cli (master -> origin) λ go run client.go Hello World ^_^

列出服务

使用前面生成的工具 micro.exe, 可以查看到 service.go 起的服务 user ( micro.Name("user") )

F:a_link_workspacegoGoWinEnv_Test01 (master -> origin) λ micro list services // 指令 user

web 界面

F:a_link_workspacegoGoWinEnv_Test01 (master -> origin) λ micro web // 指令 2019/09/28 15:23:02 HTTP API Listening on [::]:8082 // 默认端口 2019/09/28 15:23:02 Transport [http] Listening on [::]:60676 2019/09/28 15:23:02 Broker [http] Connected to [::]:60677 2019/09/28 15:23:02 Registry [mdns] Registering node: go.micro.web-4832fb75-d027-4b66-a420-09abae8e6ecb

然后打开 http://localhost:8082/registry 就能访问已有的服务

点击 user 查看服务的具体信息



推荐阅读
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • Eclipse安装教程:解决Genymotion配置中的疑难杂症
    Eclipse安装教程:解决Genymotion配置中的疑难杂症 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 基于Dubbo与Zipkin的微服务调用链路监控解决方案
    本文提出了一种基于Dubbo与Zipkin的微服务调用链路监控解决方案。通过抽象配置层,支持HTTP和Kafka两种数据上报方式,实现了灵活且高效的调用链路追踪。该方案不仅提升了系统的可维护性和扩展性,还为故障排查提供了强大的支持。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
author-avatar
儒雅的活在当下
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有