1.äºè§£go-microä¸çtransport
äºè§£go-microä¸çtransport
è¿ç¯æç« ä»ç»çtransportä¸æ¯æ们å¦ä¹ çéç¹ï¼å ä¸ºä½ å¯è½ç¨ä¸å°ä»ï¼ä½æ¯ä½ä¸ºå¦ä¹ go-microçä¸é¨åï¼è¿æ¯å¾æä¸ä¸ãtransportç¨äºæå¡é´éä¿¡ï¼åºäºsocketçsend/recvè¯ä¹ãå ¶æ¥å£çæ¹æ³éå¦ä¸ï¼
typeTransportinterface{ Init(...Option)errorOptions()OptionsDial(addrstring,源码selenium返回源码opts...DialOption)(Client,error)Listen(addrstring,opts...ListenOption)(Listener,error)String()string}var(DefaultTransportTransport=NewHTTPTransport()DefaultDialTimeout=time.Second*5)主è¦çä½ç¨ä½ç°å¨DialåListenæ¹æ³ä¸ï¼
func(h*/asim/go-micro/examples/v3/greeter/srv/proto/hello""github.com/asim/go-micro/v3""github.com/asim/go-micro/v3/util/log""google.golang.org/grpc")typeSaystruct{ }func(s*Say)Hello(ctxcontext.Context,req*hello.Request,rsp*hello.Response)error{ log.Log("ReceivedSay.Hellorequest")rsp.Msg="Hello"+req.Namereturnnil}funcmain(){ gofunc(){ for{ grpc.DialContext(context.TODO(),".0.0.1:")time.Sleep(time.Second)}}()service:=micro.NewService(micro.Name("go.micro.srv.greeter"),)//optionallysetupcommandlineusageservice.Init()//RegisterHandlershello.RegisterSayHandler(service.Server(),new(Say))//Runserveriferr:=service.Run();err!=nil{ log.Fatal(err)}}æå ³æå¡é´é信使ç¨çprotoç»æä½
syntax="proto3";packagego.micro.srv.greeter;serviceSay{ rpcHello(Request)returns(Response){ }}messageRequest{ stringname=1;}messageResponse{ stringmsg=1;}å¯å¨æå¡çæ¶åï¼éè¿æ¥å¿è¾åº,å¯ä»¥å¤§è´çäºè§£å¯å¨è¿ç¨
--::file=v3@v3.5.2-0.-cbbbc/service.go:level=infoStarting[service]go.micro.srv.greeter--::file=server/rpc_server.go:level=infoTransport[.Connvarerrerror//TODO:supportdialoptionhereratherthanusinginternalconfigifh.opts.Secure||h.opts.TLSConfig!=nil{ config:=h.opts.TLSConfigifconfig==nil{ config=&tls.Config{ InsecureSkipVerify:true,}}config.NextProtos=[]string{ ".Conn,error){ returntls.DialWithDialer(&net.Dialer{ Timeout:dopts.Timeout},"tcp",addr,config)})(addr)}else{ conn,err=newConn(func(addrstring)(net.Conn,error){ returnnet.DialTimeout("tcp",addr,dopts.Timeout)})(addr)}iferr!=nil{ returnnil,err}return&.Connvarerrerror//TODO:supportdialoptionhereratherthanusinginternalconfigifh.opts.Secure||h.opts.TLSConfig!=nil{ config:=h.opts.TLSConfigifconfig==nil{ config=&tls.Config{ InsecureSkipVerify:true,}}config.NextProtos=[]string{ ".Conn,error){ returntls.DialWithDialer(&net.Dialer{ Timeout:dopts.Timeout},"tcp",addr,config)})(addr)}else{ conn,err=newConn(func(addrstring)(net.Conn,error){ returnnet.DialTimeout("tcp",addr,dopts.Timeout)})(addr)}iferr!=nil{ returnnil,err}return&.Connvarerrerror//TODO:supportdialoptionhereratherthanusinginternalconfigifh.opts.Secure||h.opts.TLSConfig!=nil{ config:=h.opts.TLSConfigifconfig==nil{ config=&tls.Config{ InsecureSkipVerify:true,}}config.NextProtos=[]string{ ".Conn,error){ returntls.DialWithDialer(&net.Dialer{ Timeout:dopts.Timeout},"tcp",addr,config)})(addr)}else{ conn,err=newConn(func(addrstring)(net.Conn,error){ returnnet.DialTimeout("tcp",addr,dopts.Timeout)})(addr)}iferr!=nil{ returnnil,err}return&.Connvarerrerror//TODO:supportdialoptionhereratherthanusinginternalconfigifh.opts.Secure||h.opts.TLSConfig!=nil{ config:=h.opts.TLSConfigifconfig==nil{ config=&tls.Config{ InsecureSkipVerify:true,}}config.NextProtos=[]string{ ".Conn,error){ returntls.DialWithDialer(&net.Dialer{ Timeout:dopts.Timeout},"tcp",addr,config)})(addr)}else{ conn,err=newConn(func(addrstring)(net.Conn,error){ returnnet.DialTimeout("tcp",addr,dopts.Timeout)})(addr)}iferr!=nil{ returnnil,err}return&httpTransportClient{ ht:h,ad