【Tars-go】腾讯微服务框架学习使用02-- http 服务

server/2024/10/22 1:51:01/

2 http 服务

官方文档说http这里是在net/http原生包的基础上做了修改。

官方给的案例:

package mainimport ("net/http""github.com/TarsCloud/TarsGo/tars"
)func main() {mux := &tars.TarsHttpMux{}mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("Hello tafgo"))})cfg := tars.GetServerConfig()tars.AddHttpServant(mux, cfg.App+"."+cfg.Server+".HttpObj") //Register http servertars.Run()
}

可以看到 在初始化了TarsHttpMux, 再将TarsHttpMux 注册到tars框架中作为servant就可以启动http服务。

  1. TarsHttpMux是什么:

    1. // TarsHttpMux is http.ServeMux for tars http server.
      type TarsHttpMux struct {http.ServeMuxcfg *TarsHttpConf
      }
      

      可以看出TarsHttpMux确实就只是对http.ServeMux做了个包装加入了Conf 并加入了上报状态信息、计算耗时等基本服务器功能。

  2. TarsHttpMux 注册到tars框架中作为servant:

    1. tars.AddHttpServant的底层实现函数如下:

    2. // AddHttpServantWithExceptionStatusChecker add http servant handler with exceptionStatusChecker for obj.
      func (a *application) AddHttpServantWithExceptionStatusChecker(mux HttpHandler, obj string, exceptionStatusChecker func(int) bool) {cfg, ok := a.tarsConfig[obj]if !ok {msg := fmt.Sprintf("http servant obj name not found: %s", obj)ReportNotifyInfo(NotifyError, msg)TLOG.Debug(msg)panic(errors.New(msg))}TLOG.Debugf("add http protocol server: %+v", cfg)a.objRunList = append(a.objRunList, obj)addrInfo := strings.SplitN(cfg.Address, ":", 2)var port int64if len(addrInfo) == 2 {var err errorport, err = strconv.ParseInt(addrInfo[1], 10, 32)if err != nil {panic(fmt.Errorf("http server listen port: %s parse err: %v", addrInfo[1], err))}}svrCfg := a.ServerConfig()httpConf := &TarsHttpConf{Container:              svrCfg.Container,AppName:                fmt.Sprintf("%s.%s", svrCfg.App, svrCfg.Server),Version:                svrCfg.Version,IP:                     addrInfo[0],Port:                   int32(port),SetId:                  svrCfg.Setdivision,ExceptionStatusChecker: exceptionStatusChecker,}mux.SetConfig(httpConf)s := &http.Server{Addr: cfg.Address, Handler: mux, TLSConfig: cfg.TlsConfig}a.httpSvrs[obj] = s
      }
      
    3. 简单来说就是将http根据配置实例化-》再注册Sever-》这代码很好理解

  3. 配置文件配置servant

    <tars><application><server><AiGo.backend.HttpObjAdapter>allowendpoint=http -h 127.0.0.1 -p 18080 -t 60000handlegroup=AiGo.backend.HttpObjAdaptermaxconns=200000protocol=httpqueuecap=10000queuetimeout=60000servant=AiGo.backend.HttpObjshmcap=0shmkey=0threads=1</AiGo.backend.HttpObjAdapter></server></application>
    </tars>
    

    可以看出就protocol=http 这里改了,其他的和tars服务没啥区别。


http://www.ppmy.cn/server/3118.html

相关文章

如何实现文件上传到阿里云OSS!!!(结合上传pdf使用)

一、开通阿里云OSS对象存储服务 对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供 99.995 % 的服务可用性和多种存储类型&#xff0c;适用于数据湖存储&#xff0c;数据迁移&#xff0c;企…

盲人盲杖:科技革新,助力视障人士独立出行

在我们的社会中&#xff0c;盲人朋友们以其坚韧的精神风貌&#xff0c;生动诠释着生活的多样与可能。然而&#xff0c;当我们聚焦于他们的日常出行&#xff0c;那些普通人视为寻常的街道、路口&#xff0c;却成为他们必须面对的严峻挑战。如何切实提升盲人盲杖的功能&#xff0…

一个极简鲁棒的C语言的动态数据类型扩展,取代诸如C++/Rust那些愚蠢的东西

项目地址&#xff1a;https://github.com/shajunxing/banana-cvar 我用过很多高级语言&#xff0c;喜欢简单的东西&#xff0c;讨厌C&#xff0c;一直在想C语言能不能用最简洁的手段扩充动态语言特性&#xff0c;并且支持垃圾回收呢&#xff1f;偶然迸发出灵感&#xff0c;网上…

数字接龙(蓝桥杯)

文章目录 数字接龙【问题描述】解题思路DFS 数字接龙 【问题描述】 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上…

Maven实战—搭建微服务 Maven 工程架构

需求案例&#xff1a;搭建一个电商平台项目&#xff0c;该平台包括用户服务、订单服务、通用工具模块等。 项目架构&#xff1a; 用户服务&#xff1a;负责处理用户相关的逻辑&#xff0c;例如用户信息的管理、用户注册、登录等。订单服务&#xff1a;负责处理订单相关的逻辑…

微信小程序 input 不能输入特殊字符的方法

微信小程序开发中经常遇到有表单提交的需求&#xff0c;一些特殊的字段要过滤掉特殊字符。比如姓名、籍贯、地址等&#xff0c;都要实现不能输入特殊字符的功能&#xff0c;可以创建一个统一的方法来处理输入事件&#xff0c;并在这个方法中检查输入的字符。 下面是一个简单的…

【React Router】初识路由(上)

开始 使用 Vite 创建一个新的 React 应用程序&#xff1a; npm create vitelatest name-of-your-project -- --template react # follow prompts cd <your new project directory> npm install react-router-dom localforage match-sorter sort-by npm run dev添加 Rou…

【Jenkins PipeLine】Jenkins PipeLine 联动参数示例

目录 1. Pipeline script&#xff1a; 1.1.代码说明&#xff1a; 2. 实现效果&#xff1a; 3.联动说明&#xff1a; 4.Jenkins安装插件 1. Pipeline script&#xff1a; properties([parameters([[$class: "ChoiceParameter", choiceType: "PT_SINGLE_SELE…