【28181源码】【PHP周报管理源码】【进入源码世界英文】gomicro源码解析

时间:2024-12-22 19:58:36 来源:汇盈牛眼观潮指标公式源码 分类:休闲

1.了解go-micro中的transport
2.最全开源go微服务框架对比
3.从go-micro的broker开始学习go-micro

gomicro源码解析

了解go-micro中的transport

       è¿™ç¯‡æ–‡ç« ä»‹ç»çš„transport不是我们学习的重点,因为你可能用不到他,但是作为学习go-micro的一部分,还是得提一下。

       transport用于服务间通信,基于socket的send/recv语义。其接口的方法集如下:

typeTransportinterface{ Init(...Option)errorOptions()OptionsDial(addrstring,码解28181源码opts...DialOption)(Client,error)Listen(addrstring,opts...ListenOption)(Listener,error)String()string}var(DefaultTransportTransport=NewHTTPTransport()DefaultDialTimeout=time.Second*5)

       ä¸»è¦çš„作用体现在Dial和Listen方法中,

func(h*ewHttpBroker(opts...Option)Broker{ options:=Options{ Codec:json.Marshaler{ },Context:context.TODO(),Registry:registry.DefaultRegistry,}for_,o:=rangeopts{ o(&options)}//setaddressaddr:=DefaultAddressiflen(options.Addrs)>0&&len(options.Addrs[0])>0{ addr=options.Addrs[0]}h:=&.Listenervarerrerrorifh.opts.Secure||h.opts.TLSConfig!=nil{ config:=h.opts.TLSConfigfn:=func(addrstring)(net.Listener,error){ ifconfig==nil{ hosts:=[]string{ addr}//checkifitsavalidhost:portifhost,_,err:=net.SplitHostPort(addr);err==nil{ iflen(host)==0{ hosts=maddr.IPs()}else{ hosts=[]string{ host}}}//generateacertificatecert,err:=mls.Certificate(hosts...)iferr!=nil{ returnnil,err}config=&tls.Config{ Certificates:[]tls.Certificate{ cert}}}returntls.Listen("tcp",addr,config)}l,err=mnet.Listen(h.address,fn)}else{ fn:=func(addrstring)(net.Listener,error){ returnnet.Listen("tcp",addr)}l,err=mnet.Listen(h.address,fn)}iferr!=nil{ returnerr}addr:=h.addressh.address=l.Addr().String()go/.Listener,handlerHandler)error{ srv:=&Server{ Handler:handler}returnsrv.Serve(l)}

       è€Œæˆ‘们在httpbrokerConnect的时候,启动的server,传入的的正式h.mux而在指定handler的时候,我们是

funcInit(opts...Option)error{ returnDefaultCmd.Init(opts...)}0

       DefaultPath是/,h都是我们的httpbroker.之所以可以将它作为handler传入到Handle方法中,是因为,httpbroker实现了ServeHTTP方法,在这里就是路由的处理函数。

funcInit(opts...Option)error{ returnDefaultCmd.Init(opts...)}1

       åœ¨è¿™é‡Œå°±å¯ä»¥è§£ç æ¶ˆæ¯ï¼ŒèŽ·å–消息体,并进行消息处理函数的调用。

funcInit(opts...Option)error{ returnDefaultCmd.Init(opts...)}2

       è¿™å°±æ˜¯æ•´ä¸ªhttpbroker的处理流程,相信你现在就可以明白了go-micro的异步消息系统的默认实现了,如果你想实现自己的broker,只要在实现中实现了Broker接口,就可以在项目中使用自定义的broker了。无缝切换。

funcInit(opts...Option)error{ returnDefaultCmd.Init(opts...)}3

       è‡³æ­¤æ•´ä¸ªbroker部分就结束了,下一篇文章,我们就来看看如何实现一个自定义的broker.

作者:第八共同体