Go微服务: 基于Go Micro框架实现微服务调用

MICRO和GO-MICRO createdtime 20211124 updatedtime 20211126 author venki.chen 一、是什么 1. 定义,是做什么用的? go micro是什么? go-micro是框架,不是服务,但是使用它来编写微服务。 go micro详解 micro是什么? micro是基于go-micro编写,面向go-micro服务治理与生态的工具集,它包含很多服务和工具。 micro和go-micro之间的关系是什么? ①micro与go-micro是两个.. 阅读详情

Go Micro


1 )概述

  • 在具体的项目开发过程中,开发者聚焦的是业务逻辑的开发和功能的实现
  • 大量的环境配置,调试搭建等基础性工作会耗费相当一部分的精力
  • 因此有必要将微服务架构中所涉及到的,相关的解决方案做集中管理和维护
  • Go Micro 帮助我们解决了大部分上述问题,它是一个简化分布式开发的微服务生态系统
  • 该系统为开发分布式应用程序提供了高效,便捷的模块构建, 主要目的是简化分布式系统的开发
  • 它默认实现了consul 作为服务发现,通过http进行通信,通过protobuf和json进行编解码

2 ) 功能

  • 身份验证
    • 身份验证作为一等公民内置身份验证和授权通过为每个服务提供身份和证书
    • 来实现安全的零信任网络, 这还包括基于规则的访问控制
  • 动态配置
    • 从任何地方加载和热重载动态配置
    • config 接口提供了一种从任何来源(如环境变量、文件、etcd)加载应用程序级别配置的方法
    • 可以合并源,甚至定义回退数据存储- 一个简单的数据存储接口,用于读取、写入和删除记录
    • 它默认包括对内存、文件和CockroachDB 的支持
    • 状态和持久性成为原型设计之外的核心要求,Micro 希望将其构建到框架中
  • 服务发现
    • 自动服务注册和名称解析。服务发现是微服务开发的核心
    • 当服务 A 需要与服务 B 通话时,它需要该服务的位置
    • 默认发现机制是多播 DNS (mdns),一个 zeroconf 系统
  • 负载平衡
    • 基于服务发现的客户端负载平衡
    • 一旦我们有了任意数量的服务实例的地址,
    • 我们现在需要一种方法来决定路由到哪个节点
    • 我们使用随机散列负载平衡来提供跨服务的均匀分布,并在出现问题时重试不同的节点
  • 消息编码
    • 基于内容类型的动态消息编码
    • 客户端和服务器将使用编解码器和内容类型为您无缝编码和解码 Go 类型
    • 任何种类的消息都可以被编码并从不同的客户端发送
    • 默认情况下,客户端和服务器会处理此问题
    • 这默认包括 protobuf 和 json
  • RPC 客户端/服务器
    • 基于 RPC 的请求/响应,支持双向流。我们为同步通信提供了一个抽象
    • 对服务的请求将被自动解析、负载平衡、拨号和流式传输
  • Async Messaging
    • PubSub 作为异步通信和事件驱动架构的一等公民内置
    • 事件通知是微服务开发的核心模式
    • 默认消息系统是 HTTP 事件消息代理。
  • 事件流
    • PubSub 非常适合异步通知,但对于更高级的用例,事件流是首选
    • 提供持久存储,从偏移量和确认中消耗
    • Go Micro 包括对 NATS Jetstream 和 Redis 流的支持
  • 同步
    • 分布式系统通常以最终一致的方式构建
    • 对分布式锁定和领导的支持作为同步接口内置
    • 当使用最终一致的数据库或调度时,请使用 Sync 接口
  • Pluggable Interfaces
    • Go Micro 为每个分布式系统抽象使用 Go 接口
    • 因此,这些接口是可插拔的,并允许 Go Micro 与运行时无关
    • 您可以插入任何底层技术

3 )环境准备:

4 )创建一个名为 helloworld 的服务端

  • 在demo项目中,新建 demo/server目录
  • 在这个 server 目录下执行 $ go-micro new service helloworld
  • 进入这个目录 $ cd helloworld 可以看到里面生成了一系列的文件
  • 在 Linux(Mac)上执行 $ make init proto update tidy
  • 可以看到这个Make文件中封装了很多命令,方便了我们的操作
  • 改编 main.go
    package main
    
    import (
        "fmt"
        "helloworld/handler"
        pb "helloworld/proto"
    
        "go-micro.dev/v4"
        "go-micro.dev/v4/logger"
        "go-micro.dev/v4/registry"
        "github.com/go-micro/plugins/v4/registry/consul"
    )
    
    var (
        service = "helloworld"
        version = "latest"
    )
    
    func main() {
        consulReg := consul.NewRegistry(
            registry.Addrs("127.0.0.1:8500"),
        )
        fmt.Println(consulReg.Options())
        // Create service
        srv := micro.NewService(
            micro.Name(service),
            micro.Address("127.0.0.1:8080"), // 可以指定端口
            micro.Version(version),
            micro.Registry(consulReg),
        )
        srv.Init()
        
        // Register handler
        if err := pb.RegisterHelloworldHandler(srv.Server(), new(handler.Helloworld)); err != nil {
            logger.Fatal(err)
        }
        // Run service
        if err := srv.Run(); err != nil {
            logger.Fatal(err)
        }
    }
    
  • 这里添加了一些工具库,重新运行下 $ go mod tidy
  • 运行起来 $ go run main.go
  • 在注册中心可发现多出来一个新的服务,点进去就是这个 127.0.0.1:8080的 helloworld 新服务

5 )创建一个名为 helloworld-client 的客户端

  • 新建 demo/client 目录
  • 在这个目录下执行 $ go-micro new client helloworld
  • $ cd helloworld-client
  • $ make update tidy
  • 这里仍旧使用服务端的proto,但是之前的workspace管理不适合这里的模式,修改起来较为麻烦
  • 这里将其拷贝到 helloworld-client 目录中,后期可单独做一个模块来管理
  • 改编 main.go
    package main
    
    import (
        "context"
        "time"
        pb "helloworld-client/proto"
    
        "go-micro.dev/v4"
        "go-micro.dev/v4/logger"
        "github.com/go-micro/plugins/v4/registry/consul"
    )
    
    var (
        service = "helloworld"
        version = "latest"
    )
    
    func main() {
        // 集成consul
        consulReg := consul.NewRegistry()
        // Create service
        srv := micro.NewService(
            micro.Registry(consulReg),
        )
        srv.Init()
    
        // Create client
        c := pb.NewHelloworldService(service, srv.Client())
    
        for {
            // Call service
            rsp, err := c.Call(context.Background(), &pb.CallRequest{Name: "张三"})
            if err != nil {
                logger.Fatal(err)
            }
    
            logger.Info(rsp)
            time.Sleep(1 * time.Second)
        }
    }
    
    • 可以看到,这里写了一个无限循环的调用
  • 这里添加了一些工具库,重新运行下 $ go mod tidy
  • 运行起来 $ go run main.go
  • 好,发现客户端和服务端的控制台都一直在输出:请求,响应,请求,响应, …
go微服务-go-micro框架介绍 go-micro框架介绍 文章目录go-micro框架介绍一、micro框架介绍1.1、背景1.2、概述1.3、micro组成1.4、工具包介绍1.4.1、API1.4.2、Web1.4.3、Sidecar1.4.4、Bot1.4.5、CLI1.4.6、Go-Micro1.5、Go-Micro特性1.6、环境安装1.6.1、安装consul1.6.2、安装protobuf和依赖1.6.3、micro工具包安装(可选择)1.6.4、1Go-micro安装二、创建微服务2.1、服务的定义2.2、初始化服务实例 阅读详情

相关推荐

go-micro讲解--Go Micro编写微服务

一、什么是go-micro Go Micro是一个插件化的基础框架,基于此可以构建微服务。Micro的设计哲学是『可插拔』的插件化架构。在架构之外,它默认实现了consul作为服务发现,通过http进行通信,通过protobuf和json进行编解码。我们一步步深入下去。Go Micro是:一个用Golang编写的包一系列插件化的接口定义基于RPcGo Micro为下面的模块定义了接口:服务发现编解...

chen 4万+

go-micro框架介绍

介绍go微服务框架go-micro

js010111的博客 7373

golang微服务框架go-micro使用 (三) Call a service

通过命令行工具调用服务 luslin@local:~/software/zipkin$ MICRO_REGISTRY=etcd micro list services com.foo.service.micro go.micro.web micro.http.broker com.foo.service.micro 是我们的目标服务,micro.http.broker 是默认的中间件服务。 在调用前,使用get命令查看服务的详情,端点定义,元数据和节点信息等 luslin@local:~/software

luslin1711的博客 1582

[golang 微服务] 7. go-micro框架介绍,go-micro脚手架,go-micro结合consul搭建微服务案例

go-micro框架介绍,go-micro脚手架,go-micro结合consul搭建微服务案例

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 6967

Go Micro框架

Go Micro是一个微服务开发框架。Go Micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通信。 特点 自动服务注册与名称解析:服务发现是微服务开发中的核心,用于解析服务名与地址。consul是Go Micro默认的服务发现注册中心。发现系统可插拔,其他插件像etcd,kubernetes,zookeeper。 负载均衡:在服务发现之上构建了负载均衡机制。使用随机处理过的哈希负...

benben的博客 2410

借助OSS搭建在线教育视频课程分享网站-阿里云的课程体验和记录

阿里云的《搭建在线教育网站》免费课程里面讲的啥,我点进去看了看

LegendNoTitle的博客 3023

Go:使用 go-micro 构建微服务(一)

Java 社区中有着非常著名的框架用于构建微服务系统。Spring: Spring Boot 是用于编写微服务的流行 Java 框架。Spring Cloud:基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。Dropwizard:一个开源的 RESTful 快速开发框架,对微服务的开发也极其友好,而且性能很强。

GIS摆渡人 2777

常微分方程 (ODE) 和 随机微分方程 (SDE)

常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。

weixin_39699362的博客 4384

go-micro框架简介

go-micro

gcl的博客 1628

[终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 【note】免驱版只能在Windows下安装使用,在Ubuntu系统中无法使用,所以,需要另辟蹊径。 找了很多资料,尝试很多方法,有的复杂有的简单,终于解决。 【思路】首先在Ubuntu系统中输入lsusb,查看是否检测到USB网卡设备。然后从Github中复制代码,构建,安装,然后modprobe一下,到前面那步还不行,就再来一步

瑞o 1万+

统信UOS系统盘扩容保姆级教程:用GParten-分区编辑器5分钟搞定

本文提供统信UOS系统盘扩容的详细图形化教程。针对系统盘空间不足问题,重点介绍如何使用系统自带的GParten-分区编辑器,在5-10分钟内安全、直观地完成扩容操作,无需记忆复杂命令,适合所有用户快速解决存储空间告急的困扰。

e3f4g5的博客 645

go-micro AI 集成指南:让微服务成为 AI Agent 可发现、可编排的工具集

> **导读**:go-micro 是一个 AI-native(AI 原生)微服务框架,本文基于 [internal/website/content/en/docs/ai-integration/index.md](https://link.gitcode.com/i/6497922fd9e2b4e2f9a954340e20e7d9) 展开,完整梳理"服务注册 → 网关 → AI 工具 → 大模型

gitblog_00105的博客 294

如何用libwebsocket库在stm32F407上实现websocket客户端?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1135

Go Micro 架构指南:从服务、Agent 到工作流的统一运行时

Go Micro(`go-micro.dev/v6`)是一个 Go 语言编写的 Agent 运行时与微服务框架。本文基于官方架构文档([internal/website/content/en/docs/architecture/index.md](https://link.gitcode.com/i/34d8fbbcd50d72655fe64c9c94849450))展开,梳理其"服务 → Age

gitblog_01023的博客 212

OPC UA协议深度解析 + C#跨平台实战:无缝对接西门子S7-1200/1500 PLC

本文完成了OPC UA协议深度解析→西门子PLC服务端配置→C#跨平台客户端开发→全平台部署拆解OPC UA核心模型与安全机制,从原理层面理解工业标准化通信逻辑基于官方SDK开发工业级客户端,支持读写、订阅、证书管理、心跳保活核心功能实现Windows、Linux、统信UOS全平台兼容,满足工控系统国产化改造刚需提供完整的优化方案与踩坑指南,可直接落地商用项目。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 520

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

用 go-micro 构建 MCP 服务:零代码接入 AI Agent 的完整实战指南

本文围绕 go-micro 仓库中的 MCP(Model Context Protocol)示例套件展开,系统讲解如何在不写任何 Agent 专用代码的前提下,把普通 go-micro 微服务的每个 handler 方法自动变成可被 Claude Code、ChatGPT 等 AI Agent 发现和调用的 MCP 工具。读完本文,你将掌握基于 Go 注释与 struct tag 的自动文档提取机

gitblog_00988的博客 1000

c++对halcon的动态链接库dll封装及调用(细细讲)

本文详细介绍了将Halcon图像处理算法封装为C++动态链接库(DLL)的完整流程,包括7个关键步骤:1)封装Halcon函数并导出CPP文件;2)在C++项目中配置Halcon环境(包含目录、库目录设置);3)验证Halcon代码;4)创建DLL项目并进行环境配置;5)编辑DLL并导出生成文件(.dll、.lib、.h);6)在主项目中配置DLL调用环境;7)编写测试代码验证功能。通过这个流程实现了Halcon算法的模块化封装和复用,文中提供了具体的配置路径和代码示例,重点说明了环境配置细节和文件结构安排

Tianwen_running的博客 969

go-micro 反射(Reflection)去留评估:为什么“保留反射“是深思熟虑的架构决策

本文基于 go-micro 项目内一份完整的架构评估文档([internal/website/content/en/docs/REFLECTION-EVALUATION-SUMMARY.md](https://link.gitcode.com/i/f59ec4baf9f50cfe2bb3e57e2bad0c4e)),系统梳理了"是否移除反射以提升性能"这一技术议题的完整论证过程。文章将带你理解 g

gitblog_00610的博客 175

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Go语言十大主流微服务框架

istio,go-zero,go-kit,kratos,go-micro,rpcx,kitex,goa,dubbo-go,tars-go

深漂小码哥 8万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【启程Golang之旅】Go-Micro框架的高效开发技巧

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了解这门语言的基础知识和实用技巧。

ztK63LrD的博客 1831

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

go-micro微服务框架使用--golang

go-micro的简介: 可插入RPC分布式系统开发的框架,支持json,proto -rpc的编码方式,可使用consul或者其它方式的服务发现,默认是consul提供随机散列的负载均衡。 1.服务发现2.编码解码 3.服务端,客户端 4.发布订阅消息 以下是详情说明下: 1.安装 micro install $ go get -u github.com/m...

zoeou的博客 7330

golang微服务框架go-micro 入门笔记1.搭建 go-micro环境

微服务的本质是让专业的人做专业的事情,做出更好的东西。 golang具备高并发,静态编译等特性,在性能、安全等方面具备非常大的优势。go-micro是基于golang的微服务编程框架,go-micro操作简单、编码高效、功能强大。但是网络上资料偏少,本系列文章定位最简单最容易上手的go-micro入门教程,所有案列来自实操,而非网络上的复制粘贴。 本章节的目的是让大家最快速搭建好g...

afb5883的博客 963

Go-Micro微服务框架使用

1.Go-Micro微服务框架简介 Go-Micro类似Java中的SpringCloud,虽然生态上有一些区别,但是可以类比比较。官当Github地址为 https://github.com/micro/go-micro,下载安装依赖命令: go get -u github.com/micro/go-micro 2.创建Web服务 Golang本身提供了丰富的http包,并且Gin等Web框架实现一个Web服务,但是为了贴合Go-Micro框架的统一规范,所以需要通过使用Go-Micro的github.

Korbin的博客 1465

[golang 微服务] 8.go-micro的负载均衡操作,go Web框(Gin,Beego)调用go-micro微服务

go-micro的负载均衡操作,go Web框(Gin,Beego)调用go-micro微服务以及Gin,Beego创建微服务客户端操作,以及Gin, Beego框架调用微服务go-micro案例

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 2021

【Go微服务框架深度对比】Kratos、Go-Zero、Go-Micro、GoFrame、Sponge五大框架

本文对比了2025年主流的Go微服务框架(Kratos、Go-Zero、Go-Micro、GoFrame、Sponge),从核心架构、性能、功能特性、云原生支持和适用场景等方面进行详细分析。Kratos适合标准化企业级微服务,Go-Zero在高并发场景表现优异,Go-Micro支持多语言互通,GoFrame提供一站式解决方案,而Sponge则通过AI辅助提升开发效率。测试数据显示各框架在性能、资源消耗等方面各有优势,开发者可根据具体需求选择最适合的框架。

独立思考,明辨是非 2319
上一篇: Go微服务: 基于ProtoBuf实现GRPC的微服务调用
下一篇: Go微服务: 基于GRPC结合Consul实现微服务调用
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值