码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • go 学习 之 HTTP微服务示例


    1. 背景

    学习ing

    2. 创建文件:server.go

    
    ```go
    package main
    
    import (
    	"github.com/gogf/gf/contrib/registry/file/v2"
    	"github.com/gogf/gf/v2/frame/g"
    	"github.com/gogf/gf/v2/net/ghttp"
    	"github.com/gogf/gf/v2/net/gsvc"
    	"github.com/gogf/gf/v2/os/gfile"
    )
    
    func main() {
    	gsvc.SetRegistry(file.New(gfile.Temp("gsvc")))
    
    	s := g.Server(`hello.svc`)
    	s.BindHandler("/", func(r *ghttp.Request) {
    		g.Log().Info(r.Context(), `request received`)
    		r.Response.Write(`Hello world`)
    	})
    	s.Run()
    }
    

    由此可见,一个HTTP的微服务端和一个普通的Web Server端没什么差异,但是顶部多了一行代码:

    gsvc.SetRegistry(file.New(gfile.Temp("gsvc")))
    
    • gsvc 是 GF (Go Frame) 框架中的微服务治理模块,用于处理服务注册、发现、负载均衡等功能。

    • SetRegistry 是一个全局函数,用于设置微服务的注册中心。这意味着所有后续创建的服务实例将使用这个注册中心来注册自己,以便于服务发现和治理。

    • file.New(gfile.Temp(“gsvc”))是基于本地系统文件的服务注册发现组件,其中的gfile.Temp(“gsvc”)指定的是存放服务文件的路径,例如在Linux/MacOS系统下,指向的是/tmp/gsvc目录。基于文件系统的注册发现仅用于本地微服务示例,不能用于跨节点通信。

    在该示例中,给Server设置了一个名字hello.svc,该名字表示该Server绑定的微服务的名称,服务名称作为微服务的唯一标识,用于服务间的识别通信。当服务注册组件注册启用时,HTTP Server在运行时将会把自己的访问地址注册到服务注册组件中,方便其他服务通过相同组件按照服务名称进行访问。

    3. 创建文件:client.go

    package main
    
    import (
    	"time"
    
    	"github.com/gogf/gf/contrib/registry/file/v2"
    	"github.com/gogf/gf/v2/frame/g"
    	"github.com/gogf/gf/v2/net/gsvc"
    	"github.com/gogf/gf/v2/os/gctx"
    	"github.com/gogf/gf/v2/os/gfile"
    )
    
    func main() {
    	gsvc.SetRegistry(file.New(gfile.Temp("gsvc")))
    
    	client := g.Client()
    	for i := 0; i < 10; i++ {
    		ctx := gctx.New()
    		res, err := client.Get(ctx, `http://hello.svc/`)
    		if err != nil {
    			panic(err)
    		}
    		g.Log().Debug(ctx, res.ReadAllString())
    		res.Close()
    		time.Sleep(time.Second)
    	}
    }
    

    客户端通过g.Client()创建一个HTTP Client,并通过http://hello.svc/地址访问服务端,其中的hello.svc即先前的Server端绑定的微服务名称。当客户端通过微服务名称访问的时候,服务注册发现组件将会在底层进行检索,并找到对应的服务端地址进行通信。

    4. 执行结果

    • 先执行server.go服务端运行一个简单的服务,随后再执行client.go通过服务名称请求服务。

    执行后

    • 客户端输出:
      在这里插入图片描述

    • 服务端输出:
      在这里插入图片描述

  • 相关阅读:
    “年薪 25 万只是白菜价”已成过去式,AI 岗位年薪下降 8.9%,最新薪酬报告发布
    C++模板——待决名
    动态权重之多任务不平衡论文 (一)
    HTML5期末大作业:基于HTML+CSS+JavaScript仿蘑菇街购物商城设计毕业论文源码
    基于Kubernetes v1.24.0的集群搭建(一)
    java 基于 SpringMVC+Mybaties+ Html5 + Vue 前后端分离 房地产管理系统 的 设计与实现
    李宏毅机器学习|图神经网络Graph Nerual Networks(GNN)|学习笔记-part1
    Altium Designer PCB加载封装和向导封装,将IPC封装、加载封装和向导封装添加到原理图里、制作集成库
    【C#】使用ffmpeg image2pipe 将图片保存为mp4视频
    Linux常用命令
  • 原文地址:https://blog.csdn.net/Orange_hhh/article/details/140042006
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号