热门标签 | 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 查看服务的具体信息



推荐阅读
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
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社区 版权所有