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

2 http 服务

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

官方给的案例:

go 复制代码
package main

import (
	"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 server
	tars.Run()
}

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

  1. TarsHttpMux是什么:

    go 复制代码
    // TarsHttpMux is http.ServeMux for tars http server.
    type TarsHttpMux struct {
    	http.ServeMux
    	cfg *TarsHttpConf
    }

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

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

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

    go 复制代码
    // 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 int64
    	if len(addrInfo) == 2 {
    		var err error
    		port, 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
    }
    1. 简单来说就是将http根据配置实例化-》再注册Sever-》这代码很好理解
  3. 配置文件配置servant

    xml 复制代码
    <tars>
        <application>
            <server>
                <AiGo.backend.HttpObjAdapter>
                    allow
                    endpoint=http -h 127.0.0.1 -p 18080 -t 60000
                    handlegroup=AiGo.backend.HttpObjAdapter
                    maxconns=200000
                    protocol=http
                    queuecap=10000
                    queuetimeout=60000
                    servant=AiGo.backend.HttpObj
                    shmcap=0
                    shmkey=0
                    threads=1
                </AiGo.backend.HttpObjAdapter>
            </server>
        </application>
    </tars>

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

相关推荐
北冥you鱼12 小时前
Go 语言 CRUD 实战:从接口设计到真实业务场景
开发语言·后端·golang
adinnet202612 小时前
电商客服对话知识库的自学习闭环与质量演进机制
学习
lazy H13 小时前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408
试剂界的爱马仕14 小时前
α-Cyano-4-hydroxycinnamic acid(CHCA)用作 MALDI-TOF 基质的配制与使用
大数据·人工智能·深度学习·学习
小向是个Der14 小时前
嵌入式进阶——编译与链接
汇编·单片机·学习·编译原理·交叉编译
学网安的肆伍15 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
每天一道题15 小时前
微服务为什么会变慢?从 QPS、P99 到 Trace 与性能瓶颈
微服务·云原生·架构
海绵宝宝转agent15 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
小oo呆15 小时前
【学习心得】MCP工具开发学习笔记
笔记·学习
kyrie_sakura15 小时前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus