├── .babelrc ├── .docsite ├── .eslintrc ├── .gitignore ├── .travis.yml ├── 404.html ├── LICENSE ├── README.md ├── README_CN.md ├── baidu_verify_9ea1htgFIo.html ├── blog ├── en-us │ ├── .gitkeep │ └── download.md └── zh-cn │ ├── .gitkeep │ ├── download.md │ ├── dubbo-go-1.4.0.md │ ├── dubbo-go-experience.md │ ├── dubbo-go-hessian2-1.6.md │ ├── dubbo-go-k8s-registry.md │ ├── dubbo-go-one-year.md │ ├── dubbo-go-practice-exploration.md │ ├── dubbo-go-rusted-call-implementation.md │ ├── dubbo-go-sentinel.md │ ├── dubbogo-configcenter.md │ ├── dubbogo-metrics-design-implementation.md │ ├── dubbogo-tps-limit-design-implementation.md │ ├── graceful-shutdown.md │ └── grpc-dubbo.md ├── docs ├── en-us │ ├── developer │ │ └── design.md │ ├── source_code │ │ └── extension.md │ └── user │ │ ├── configuration │ │ └── provider.md │ │ ├── preface │ │ └── architecture.md │ │ ├── quick-start.md │ │ └── registry │ │ ├── consul.md │ │ ├── etcdv3.md │ │ ├── introduction.md │ │ ├── nacos.md │ │ └── zookeeper.md └── zh-cn │ ├── developer │ └── design.md │ ├── md │ ├── arch │ │ ├── dubbo-go-design-implement-and-featrues.md │ │ ├── dubbo-go-one-year.md │ │ └── dubbo-go-review-and-future.md │ ├── config-center │ │ └── how-to-implement-remote-configuration-management-in-dubbo-go.md │ ├── course │ │ ├── dubbo-go-application-dimension-registration-model.md │ │ ├── mosn-dubbo-go.md │ │ ├── practice-and-exploration-of-dubbo-go.md │ │ ├── quick-start-dubbo-go.md │ │ ├── quick-start.md │ │ ├── ten-year-dubbo.md │ │ ├── the-5th-years-of-dubbo-go.md │ │ └── the-growth-of-dubbo-go.md │ ├── getty │ │ └── getty-development-log.md │ ├── hessian2 │ │ ├── dubbo-go-hessian2-performance-optimization.md │ │ ├── mosn-performance-optimization.md │ │ ├── what's-new-in-dubbo-go-hessian2-v1.6.0.md │ │ └── what's-new-in-dubbo-go-hessian2-v1.7.0.md │ ├── interview │ │ ├── dubbo-go-published.md │ │ ├── what's-new-in -dubbo-go-v1.4.0.md │ │ ├── what's-new-in -dubbo-go-v1.5.1.md │ │ └── what's-new-in -dubbo-go-v1.5.md │ ├── practice │ │ ├── dubbo-go-experience.md │ │ └── dubbo-go-quick-start.md │ ├── registry-center │ │ ├── design-and-implementation-of-dubbo-go-and-k8s-registry.md │ │ └── dubbo-go-registry-center--nacos.md │ ├── routing-rule │ │ └── how-to-implement-routing-rule-in-dubbo-go.md │ ├── rpc │ │ ├── dubb-go-adaptive-grpc.md │ │ └── dubbo-go-trusted-RPC-call-implementation.md │ └── service-governance │ │ ├── dubbo-go-metrics-design.md │ │ ├── dubbo-go-sentinel.md │ │ ├── dubbo-go-tps-limit-design-and-implement.md │ │ ├── implementation-of-rest-protocol-in-dubbo-go.md │ │ └── zero-cost-access-to-mosn-for-dubbo-go.md │ ├── pic │ ├── arch │ │ ├── dubbo-go-arch.png │ │ ├── dubbo-go-design-implement-and-featrues-a.png │ │ ├── dubbo-go-design-implement-and-featrues-b.png │ │ ├── dubbo-go-design-implement-and-featrues-c.png │ │ ├── dubbo-go-design-implement-and-featrues-d.png │ │ ├── dubbo-go-design-implement-and-featrues-e.png │ │ ├── dubbo-go-design-implement-and-featrues-f.png │ │ ├── dubbo-go-design-implement-and-featrues-g.png │ │ ├── dubbo-go-design-implement-and-featrues-h.png │ │ ├── dubbo-go-design-implement-and-featrues-i.png │ │ ├── dubbo-go-design-implement-and-featrues-j.png │ │ ├── dubbo-go-design-implement-and-featrues-k.png │ │ ├── dubbo-go-ext.png │ │ ├── dubbo-go-one-year-1.png │ │ ├── dubbo-go-one-year-2.png │ │ ├── dubbo-go-one-year-3.png │ │ ├── dubbo-go-one-year-4.png │ │ ├── dubbo-go-one-year-5.png │ │ ├── dubbo-go-review-and-future-0.jpg │ │ ├── dubbo-go-review-and-future-a.jpg │ │ ├── dubbo-go-review-and-future-b.jpg │ │ ├── dubbo-go-review-and-future-c.jpg │ │ ├── dubbo-go-review-and-future-d.jpg │ │ ├── dubbo-go-review-and-future-e.jpg │ │ ├── dubbo-go-review-and-future-f.jpg │ │ ├── dubbo-go-review-and-future-g.jpg │ │ ├── dubbo-go-review-and-future-h.jpg │ │ ├── dubbo-go-review-and-future-i.jpg │ │ ├── dubbo-go-review-and-future-j.jpg │ │ ├── dubbo-go-review-and-future-k.jpg │ │ ├── dubbo-go-review-and-future-l.jpg │ │ ├── dubbo-go-review-and-future-m.jpg │ │ ├── dubbo-go-review-and-future-n.jpg │ │ ├── dubbo-go-review-and-future-o.png │ │ ├── dubbo-go-review-and-future-p.png │ │ ├── dubbo-go-review-and-future-q.jpg │ │ ├── dubbo-go-review-and-future-r.jpg │ │ ├── dubbo-go-review-and-future-s.jpg │ │ ├── dubbo-go-review-and-future-t.png │ │ ├── dubbo-go-review-and-future-u.png │ │ ├── dubbo-go-review-and-future-v.jpg │ │ ├── dubbo-go-review-and-future-w.jpg │ │ ├── dubbo-go-review-and-future-x.png │ │ ├── dubbo-go-review-and-future-y.jpg │ │ └── dubbo-go-review-and-future-z.jpg │ ├── config-center │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-a.jpg │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-b.png │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-c.png │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-d.png │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-e.png │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-f.png │ │ ├── how-to-implement-remote-configuration-management-in-dubbo-go-g.png │ │ └── how-to-implement-remote-configuration-management-in-dubbo-go-h.png │ ├── course │ │ ├── dubbo-go-application-dimension-registration-model-1.png │ │ ├── dubbo-go-application-dimension-registration-model-2.png │ │ ├── dubbo-go-application-dimension-registration-model-3.png │ │ ├── dubbo-go-application-dimension-registration-model-4.png │ │ ├── mosn-dubbo-go-1.png │ │ ├── mosn-dubbo-go-2.png │ │ ├── mosn-dubbo-go-3.png │ │ ├── mosn-dubbo-go-4.png │ │ ├── mosn-dubbo-go-5.png │ │ ├── practice-and-exploration-of-dubbo-go-1.png │ │ ├── practice-and-exploration-of-dubbo-go-2.png │ │ ├── practice-and-exploration-of-dubbo-go-3.png │ │ ├── practice-and-exploration-of-dubbo-go-4.png │ │ ├── ten-year-dubbo-1.png │ │ ├── ten-year-dubbo-2.png │ │ ├── the-5th-years-of-dubbo-go-a.png │ │ ├── the-5th-years-of-dubbo-go-b.png │ │ └── the-5th-years-of-dubbo-go-c.png │ ├── getty │ │ ├── getty_connected_udp_socket.gif │ │ └── getty_dns_udp.gif │ ├── hessian2 │ │ ├── dubbo-go-hessian2-performance-optimization-a.png │ │ ├── dubbo-go-hessian2-performance-optimization-b.png │ │ ├── dubbo-go-hessian2-performance-optimization-c.png │ │ ├── dubbo-go-hessian2-performance-optimization-d.png │ │ ├── dubbo-go-hessian2-performance-optimization-e.png │ │ ├── dubbo-go-hessian2-performance-optimization-f.png │ │ ├── dubbo-go-hessian2-performance-optimization-g.png │ │ ├── dubbo-go-hessian2-performance-optimization-h.png │ │ ├── mosn-performance-optimization-1.png │ │ ├── mosn-performance-optimization-2.png │ │ ├── mosn-performance-optimization-3.png │ │ └── mosn-performance-optimization-4.png │ ├── interview │ │ ├── dubbo-go-published-a.jpg │ │ ├── dubbo-go-published-b.jpg │ │ ├── dubbo-go-published-c.jpg │ │ ├── what's-new-in-dubbo-go-v1.4.0-a.png │ │ ├── what's-new-in-dubbo-go-v1.4.0-b.png │ │ ├── what's-new-in-dubbo-go-v1.4.0-c.png │ │ ├── what's-new-in-dubbo-go-v1.4.0-d.png │ │ ├── what's-new-in-dubbo-go-v1.4.0-e.png │ │ ├── what's-new-in-dubbo-go-v1.5-1.png │ │ ├── what's-new-in-dubbo-go-v1.5-2.png │ │ └── what's-new-in-dubbo-go-v1.5-3.png │ ├── registry-center │ │ ├── design-and-implementation-of-dubbo-go-and-k8s-registry-1.png │ │ ├── design-and-implementation-of-dubbo-go-and-k8s-registry-2.png │ │ ├── design-and-implementation-of-dubbo-go-and-k8s-registry-3.png │ │ ├── dubbo-go-registry-center--nacos-a.png │ │ ├── dubbo-go-registry-center--nacos-b.png │ │ ├── dubbo-go-registry-center--nacos-c.png │ │ ├── dubbo-go-registry-center--nacos-d.png │ │ ├── dubbo-go-registry-center--nacos-e.png │ │ ├── dubbo-go-registry-center--nacos-f.png │ │ ├── dubbo-go-registry-center--nacos-g.png │ │ ├── dubbo-go-registry-center--nacos-h.png │ │ ├── dubbo-go-registry-center--nacos-i.png │ │ └── dubbo-go-registry-center--nacos-j.png │ ├── routing-rule │ │ ├── how-to-implement-routing-rule-in-dubbo-go-a.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-b.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-c.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-d.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-e.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-f.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-g.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-h.png │ │ ├── how-to-implement-routing-rule-in-dubbo-go-i.png │ │ └── how-to-implement-routing-rule-in-dubbo-go-j.png │ ├── rpc │ │ ├── dubb-go-adaptive-grpc-a.png │ │ ├── dubb-go-adaptive-grpc-b.png │ │ ├── dubb-go-adaptive-grpc-c.png │ │ ├── dubb-go-adaptive-grpc-d.png │ │ ├── dubb-go-adaptive-grpc-e.png │ │ ├── dubb-go-adaptive-grpc-f.png │ │ ├── dubb-go-adaptive-grpc-g.png │ │ ├── dubb-go-adaptive-grpc-h.png │ │ ├── dubb-go-adaptive-grpc-i.png │ │ ├── dubb-go-adaptive-grpc-j.png │ │ ├── dubb-go-adaptive-grpc-k.png │ │ ├── dubb-go-adaptive-grpc-l.png │ │ ├── dubb-go-adaptive-grpc-m.png │ │ ├── dubb-go-adaptive-grpc-n.png │ │ └── dubbo-go-trusted-RPC-call-implementation-1.png │ └── service-governance │ │ ├── dubbo-go-sentinel-a.png │ │ ├── dubbo-go-sentinel-b.png │ │ ├── dubbo-go-tps-limit-design-and-implement-a.png │ │ ├── dubbo-go-tps-limit-design-and-implement-b.png │ │ ├── dubbo-go-tps-limit-design-and-implement-c.png │ │ ├── dubbo-go-tps-limit-design-and-implement-d.png │ │ ├── dubbo-go-tps-limit-design-and-implement-e.png │ │ ├── dubbo-go-tps-limit-design-and-implement-f.png │ │ ├── dubbo-go-tps-limit-design-and-implement-g.png │ │ ├── dubbo-go-tps-limit-design-and-implement-h.png │ │ ├── dubbo-go-tps-limit-design-and-implement-i.png │ │ ├── dubbo-go-tps-limit-design-and-implement-j.png │ │ └── implementation-of-rest-protocol-in-dubbo-go-1.jpeg │ ├── source_code │ └── extension.md │ └── user │ ├── configuration │ └── provider.md │ ├── preface │ └── architecture.md │ ├── quick-start.md │ └── registry │ ├── consul.md │ ├── etcdv3.md │ ├── introduction.md │ ├── nacos.md │ └── zookeeper.md ├── google7362984ffdc17d37.html ├── gulpfile.js ├── img ├── alibaba.png ├── alibaba_hover.png ├── apache_logo.png ├── architecture.png ├── arrow_down.png ├── arrow_right.png ├── blog.png ├── blog │ ├── .gitkeep │ ├── dubbo-go-1.4.0.resources │ │ ├── auth.png │ │ ├── configcenter.png │ │ ├── connect.png │ │ ├── dubbo-go-k8s-registry.png │ │ └── rest.png │ ├── dubbo-go-k8s-registry.resources │ │ ├── dubbo-k8s-registry.png │ │ ├── dubbo-registry.png │ │ └── k8s-discovery.png │ ├── dubbo-go-rusted-call-implementation.resources │ │ └── rusted-call.png │ ├── dubbogo-configcenter.resources │ │ ├── apollo-support.png │ │ ├── configCenterFactory.png │ │ ├── configcenter-class.jpg │ │ ├── configurationFactory.png │ │ ├── design.jpg │ │ ├── dynamicConfiguration.png │ │ ├── key-struct.jpg │ │ └── zookeeper-usercase.png │ ├── dubbogo-grpc │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png │ ├── dubbogo-metrics-design-implementation.resources │ │ ├── 02D8682E-E9CB-413A-A870-0624FA9FF3DC.png │ │ ├── 0458EEEC-3D3A-48DD-AF6D-FBEECB12BAAB.png │ │ ├── 06C23FEB-1175-4515-979A-35BC1083EEA2.png │ │ ├── 18FB16F5-1DC6-4FE1-A3AD-7485B27D47A1.png │ │ ├── 1ECF7DDE-6079-46FF-B6D5-F98EE8C61E1C.png │ │ ├── 29B3D035-5E7C-4255-AD3F-2AC708613E2E.png │ │ ├── 2DFF562A-FFE9-40FA-ACA1-79B4D8F885D8.png │ │ ├── 5005C490-06DE-4591-AC0A-2CB7AF5B7B16.png │ │ ├── 6E9950E9-2660-4320-85C9-AC37F3FC91A2.png │ │ ├── 6FA364EC-4F91-4AA9-BE04-6ACEEEDEE2ED.png │ │ ├── 8714678C-DEF4-4689-AEA7-1277CA367820.png │ │ ├── 88BFAACF-DF73-43EE-A2A2-2B2B29E774DF.png │ │ ├── A3407C69-FC94-468A-90AC-440671C8CED9.png │ │ ├── B93442AD-3367-4020-80B3-54D3FF26342C.png │ │ ├── C86E3808-33CC-4E8C-9C6C-76028DFD9F02.png │ │ ├── CA2B8545-71EA-4BC1-BD0F-2576E194641A.png │ │ ├── D8B67CA9-A65A-4913-860D-AC491D6A92A8.png │ │ ├── D97C3B91-9837-41E0-AAD4-D40FF0714033.png │ │ ├── E388EA3B-9C62-4202-9AAD-7C2D95FAD08A.png │ │ ├── F2BB669C-E80F-4111-830B-A1550ECA05A4.png │ │ └── FDB62C61-4010-4731-9F71-214E9A822647.png │ ├── dubbogo-sentinel.resources │ │ ├── dubbo-go-sentinel-provider-filter.png │ │ └── sentinel-golang.png │ ├── dubbogo-tps-limit-design-implementation.resources │ │ ├── 03F6405B-EC9E-4B6C-ADBC-B592C7D73993.png │ │ ├── 0828B17D-E360-411C-890E-D29A8AFDC0C3.png │ │ ├── 16EC5FAF-9315-497A-9935-3D71D6396C1D.png │ │ ├── 175110DC-4A63-4D62-ABC9-60B0B2583332.png │ │ ├── 1C41456B-F16A-47A2-8840-062ACB0C3A96.png │ │ ├── 1EAB168B-3593-406B-ACDD-7EDCD83780A4.png │ │ ├── 3DDA7F0A-6B09-4688-BFF3-BB07B4322B83.png │ │ ├── 6A9A771E-C9FF-45E0-88AE-2F9E310E9F6C.png │ │ ├── 9110D139-2D32-41E7-BD12-D114AD52CB19.png │ │ ├── AB4AE556-6447-4C85-9DAB-8C1A291C1750.png │ │ ├── AD66F1F8-44DC-4331-BA66-50400040B426.png │ │ ├── C45FA9ED-EBB8-4A7C-ACBC-1CB1F4938CDE.png │ │ └── ED904B92-2DE3-4FB8-86B1-4004952285DA.png │ └── graceful-shutdown.resources │ │ ├── 02181BEF-03D7-4987-BC39-9831C07944BD.png │ │ ├── 0B9BD927-0DCF-4439-8800-B725D219DD64.png │ │ ├── 0BB9995C-4E20-444D-BAC8-525F9A13C0C4.png │ │ ├── 1788C3AD-30A8-48BD-986E-1BA169EBD712.png │ │ ├── 2135B11B-7FF7-4EB2-BEB5-4516FD8003BF.png │ │ ├── 2801B5B0-D743-48E5-AA9C-02BFD7E7A2E1.png │ │ ├── 3FBBA4BA-639F-4915-BF91-E5B87E2548CC.png │ │ ├── 41CD44F6-278A-4298-8E65-AF075B40DD09.png │ │ ├── 4969FC2A-29E1-4AF2-8F55-FA078AD8AD2B.png │ │ ├── 520B03F6-01F6-4A55-B92B-D78DE8CE29E3.png │ │ ├── 58B1A48E-358F-45A0-9210-1BD06647EB6F.jpg │ │ ├── 82381102-B9A2-48B4-92AD-03B5601E4E7F.png │ │ ├── 855E8ED8-0447-4A95-B0CC-8D67FAFF980D.png │ │ ├── 8D32BFA6-4C61-466B-A877-3F278529557C.png │ │ ├── 95858C87-82F5-40EA-A705-8074A0125DCC.png │ │ ├── 984096FE-8A3D-4455-9C52-10D4BCE76D6D.png │ │ ├── ACF8EC2D-6CF4-4117-B38C-3A3164166ED5.png │ │ ├── BFC7D79A-E97B-41D5-B622-698E4D90D25C.png │ │ ├── C51595FC-BD64-49D2-8B13-253CD72BD2F1.png │ │ ├── C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png │ │ ├── D48DE29E-042A-46D7-B699-90D0D5CE6EB9.png │ │ ├── DA86E6E3-9A89-4352-AEB2-9B1730739F93.png │ │ ├── DE9BB73F-D08E-44BC-A186-87A14B88FEBF.png │ │ ├── F015A2D2-4FE9-493A-A58E-3C6795B5EC7C.png │ │ ├── F04254AA-EDF9-4677-81FE-3952910BDF36.png │ │ ├── F895B55D-CDF6-433C-9CD0-9F79A659727B.png │ │ ├── F94B1BF6-C09E-41EB-A7E9-636915CC539E.png │ │ └── gaitubao_C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png ├── community.png ├── dingding.png ├── doc │ ├── dubbo-go-arch.png │ └── dubbo-go-ext.png ├── docs.png ├── docs_hover.png ├── docs_normal.png ├── documents.png ├── dubbo-go-architecture.png ├── dubbo-go-client.png ├── dubbo-go-group.jpg ├── dubbo-go-server.png ├── dubbo-go.png ├── dubbo.ico ├── dubbo.png ├── dubbo_colorful.png ├── dubbo_gray.png ├── dubbo_white.png ├── feature_hogh.png ├── feature_loadbalances.png ├── feature_maintenance.png ├── feature_runtime.png ├── feature_service.png ├── feature_transpart.png ├── incubating.png ├── incubating.svg ├── issue.png ├── mailinglist.png ├── mailinglist_hover.png ├── manage_profiles.png ├── menu_gray.png ├── menu_white.png ├── next.png ├── prev.png ├── pullrequest.png ├── quick_start.png ├── so-icon-hover.png ├── so-icon.png ├── twitter.png ├── twitter_hover.png ├── user_chuangjinzhitou.png ├── users_alibaba.png ├── users_ctrip.png ├── users_haozhuo.png ├── users_tuya.png ├── zk-configcenter-governance.jpg └── zk-configcenter.jpg ├── package.json ├── redirect.ejs ├── resource ├── 2017-于雨-dubbogo.pdf ├── API.png ├── DUBBO-GO@2019.08.17上海02.pptx ├── Invoker.png ├── cluster.png ├── config.png ├── dubbo-go-arch.pptx ├── dubbogo20191224-shanghai-gopher.pptx ├── dubbogo20191228-hangzhou-gopher-邓明.pptx ├── filter.png ├── load_balancers.png ├── metadata.png ├── monitor.png ├── panty_dubbo-go_share.pptx ├── protocol.png ├── proxy.png ├── registry.png └── router.png ├── schema └── dubbo │ └── dubbo.xsd ├── site_config ├── blog.js ├── community.jsx ├── docs.js ├── home.jsx └── site.js ├── sitemap.xml ├── src ├── components │ ├── bar │ │ ├── index.jsx │ │ └── index.scss │ ├── button │ │ ├── index.jsx │ │ └── index.scss │ ├── footer │ │ ├── index.jsx │ │ └── index.scss │ ├── header │ │ ├── index.jsx │ │ └── index.scss │ ├── language │ │ └── index.jsx │ ├── pageSlider │ │ ├── index.jsx │ │ └── index.scss │ ├── sidemenu │ │ ├── index.jsx │ │ ├── index.scss │ │ └── item.jsx │ └── slider │ │ ├── index.jsx │ │ └── index.scss ├── fonts │ ├── TXD_D-Medium.eot │ ├── TXD_D-Medium.ttf │ ├── TXD_D-Medium.woff │ ├── TXD_D-Regular.eot │ ├── TXD_D-Regular.ttf │ └── TXD_D-Regular.woff ├── markdown.scss ├── pages │ ├── blog │ │ ├── blogItem.jsx │ │ ├── blogItem.scss │ │ ├── index.jsx │ │ └── index.scss │ ├── blogDetail │ │ ├── index.jsx │ │ └── index.scss │ ├── community │ │ ├── contactItem.jsx │ │ ├── contributorItem.jsx │ │ ├── ecoItem.jsx │ │ ├── eventCard.jsx │ │ ├── index.jsx │ │ └── index.scss │ ├── documentation │ │ ├── index.jsx │ │ └── index.scss │ └── home │ │ ├── featureItem.jsx │ │ ├── index.jsx │ │ └── index.scss ├── reset.scss └── variables.scss ├── template.ejs ├── utils └── index.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "transform-decorators-legacy", 4 | "transform-class-properties", 5 | "transform-object-rest-spread", 6 | "transform-object-assign", 7 | [ 8 | "transform-runtime", 9 | { 10 | "helpers": false, 11 | "polyfill": false, 12 | "regenerator": true, 13 | "moduleName": "babel-runtime" 14 | } 15 | ] 16 | ], 17 | "presets": [ 18 | "react", 19 | "stage-0", 20 | "es2015" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /.docsite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/.docsite -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint-config-ali/react", 3 | "parser": "babel-eslint", 4 | "env": { 5 | "browser": true, 6 | "node": true, 7 | "mocha": true 8 | }, 9 | "globals": { 10 | "AK_GLOBAL": true, 11 | "dd": {}, 12 | "_czc": {}, 13 | "dplus": {}, 14 | "salt": {}, 15 | "_": true, 16 | "homePageData": {}, 17 | "Lang": {} 18 | }, 19 | "rules": { 20 | "max-len": 0, //关闭最大长度限制 21 | "new-cap": [2, { "newIsCap": true, "properties": false }], 22 | "react/jsx-indent": 0, 23 | "react/jsx-indent-props": 0, 24 | "indent": 0, 25 | "radix": ["error", "as-needed"] 26 | } 27 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules/ 3 | .DS_Store 4 | npm-debug.log 5 | *.orig 6 | package-lock.json 7 | *.iml 8 | /en-us/ 9 | /zh-cn/ 10 | build/ 11 | index.html 12 | md_json/ 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - "8" 5 | 6 | # 依赖安装 7 | install: 8 | - npm install docsite -g 9 | - npm install 10 | 11 | # 构建脚本 12 | script: 13 | - docsite build 14 | - mkdir ./temporary 15 | - cp -r build/ index.html 404.html img/ zh-cn/ en-us/ ./temporary/ 16 | 17 | # 分支白名单 18 | branches: 19 | only: 20 | - master # 只对 master 分支进行构建 21 | 22 | # GitHub Pages 部署 23 | deploy: 24 | provider: pages 25 | skip_cleanup: true 26 | github_token: $GITHUB_TOKEN 27 | keep_history: true 28 | # 将 temporary 目录下的内容推送到默认的 gh-pages 分支上,并不会连带 temporary 目录一起 29 | local_dir: temporary 30 | #fqdn: $CUSTOM_DOMAIN 31 | name: $GIT_NAME 32 | email: $GIT_EMAIL 33 | on: 34 | branch: master -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Apache Dubbo is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. 11 | 12 | 20 |

Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.

21 | Security 22 | 23 | 24 | 33 | 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dubbo-go Official Website 2 | 3 | This project includes official documents and blogs of Dubbo-go to guide users to use Dubbo go correctly. 4 | 5 | ## Prerequisite 6 | 7 | Dubbo-go website is powered by [docsite](https://github.com/txd-team/docsite). 8 | If your version of docsite is less than `1.3.3`, please upgrade to `1.3.3`. 9 | Please also make sure your node version is 8.x, versions higher than 8.x is not supported by docsite yet. 10 | 11 | ## Build instruction 12 | 13 | 1. Run `npm install docsite -g` to install the dev tool. 14 | 2. Run `npm i` in the root directory to install the dependencies. 15 | 3. Run `docsite start` in the root directory to start a local server, you will see the website in 'http://127.0.0.1:8080'. 16 | 4. Run `docsite build` to build source code. 17 | 5. Verify your change locally: `python -m SimpleHTTPServer 8000`, when your python version is 3 use :`python3 -m http.server 8000` instead. 18 | 19 | If you have higher version of node installed, you may consider `nvm` to allow different versions of `node` coexisting on your machine. 20 | 21 | 1. Follow the [instructions](http://nvm.sh) to install nvm 22 | 2. Run `nvm install v8.16.0` to install node v8 23 | 3. Run `nvm use v8.16.0` to switch the working environment to node v8 24 | 4. Run `npm install docsite -g` 25 | 26 | Then you are all set to run and build the website. Follow the build instruction above for the details. 27 | 28 | ## How to send a PR 29 | 30 | 1. Do not use `git add .` to commit all the changes. 31 | 2. Just push your changed files, such as: 32 | * `*.md` 33 | * blog.js or docs.js or site.js 34 | 3. Send a PR to **master** branch. 35 | 36 | ## SEO 37 | 38 | Make sure each .md starts with the following texts: 39 | 40 | ``` 41 | --- 42 | title: title 43 | keywords: keywords1,keywords2,keywords3 44 | description: some description 45 | --- 46 | ``` 47 | 48 | ## Guide for adding new document 49 | 50 | 51 | ### Add a new doc 52 | 53 | 1. Add new .md file under docs/en-us or docs/zh-cn. 54 | 2. Update site_config/docs.js, add a new entry to the docs in either en-us or zh-cn. 55 | 3. Run docsite start locally to verify the blog can be displayed correctly. 56 | 4. Send the pull request contains the .md and docs.js only. 57 | 58 | ### Add a new blog 59 | 60 | 1. Add new .md file under blog/en-us or blog/zh-cn. 61 | 2. Update site_config/blog.js, add a new entry to the blog in either en-us or zh-cn. 62 | 3. Run docsite start locally to verify the blog can be displayed correctly. 63 | 4. Send the pull request contains the .md and blog.js only. -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | # Dubbo-go官方站点 2 | 3 | 此项目包括Dubbo-go官方文档、博客等内容,引导用户正确使用Dubbo-go。 4 | 5 | ## 先决条件 6 | 7 | Dubbo-go 站点由[docsite](https://github.com/txd-team/docsite)提供支持。 8 | 如果您的版本低于`1.3.3`,请升级到`1.3.3`。 9 | 同时请确保你的node版本是8.x,docsit还不支持高于8.x的版本。 10 | 11 | ## 构建说明 12 | 13 | 1. 运行 `npm install docsite -g` 安装开发工具。 14 | 2. 在根目录下运行 `npm i` 安装依赖。 15 | 3. 在根目录下运行 `docsite start` 启动本地服务, 你可以在 'http://127.0.0.1:8080' 下访问站点。 16 | 4. 运行 `docsite build` to build source code。 17 | 5. 验证本地修改: `python -m SimpleHTTPServer 8000`, 如果python版本是3则使用 : `python3 -m http.server 8000`。 18 | 19 | 如果您已经安装了更高的node版本,可以考虑使用 `nvm` 支持多版本的 `node` 同时存在您的机器上。 20 | 21 | 1. 跟着 [说明](http://nvm.sh) 来安装nvm 22 | 2. 运行 `nvm install v8.16.0` 安装 node v8 23 | 3. 运行 `nvm use v8.16.0` 切换工作环境到 node v8 24 | 4. 运行 `npm install docsite -g` 25 | 26 | 然后您就可以运行并构建网站了。详情请遵循上面的构建说明。 27 | 28 | ## 如何提交PR 29 | 30 | 1. 不要使用 `git add .` 来提交所有的修改。 31 | 2. 只提交您修改过的文件,如: 32 | * `*.md` 33 | * blog.js or docs.js or site.js 34 | 3. 提交一个PR到 **master** 分支. 35 | 36 | 37 | ## SEO 38 | 39 | 确保每个 .md 文件开头都有以下内容: 40 | 41 | ``` 42 | --- 43 | title: 标题 44 | keywords: 关键词1,关键词2,关键词3 45 | description: 描述 46 | --- 47 | ``` 48 | 49 | ## 添加文档指南 50 | 51 | ### 添加一篇新的文档 52 | 53 | 1. 在 docs/en-us 或 docs/zh-cn 目录下添加一个新的 .md 文件。 54 | 2. 更新 site_config/docs.js 文件,添加一个新的条目到 en-us 或 zh-cn。 55 | 3. 本地运行 docsite start 验证内容可以正确显示。 56 | 4. 提交一个仅包含 .md 和 docs.js 文件的PR。 57 | 58 | ### 添加一篇新的博客 59 | 60 | 1. 在 blog/en-us 或 blog/zh-cn 目录下添加一个新的 .md 文件。 61 | 2. 更新 site_config/blog.js 文件,添加一个新的条目到 en-us 或 zh-cn。 62 | 3. 本地运行 docsite start 验证内容可以正确显示。 63 | 4. 提交一个仅包含 .md 和 blog.js 文件的PR。 -------------------------------------------------------------------------------- /baidu_verify_9ea1htgFIo.html: -------------------------------------------------------------------------------- 1 | 9ea1htgFIo -------------------------------------------------------------------------------- /blog/en-us/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/blog/en-us/.gitkeep -------------------------------------------------------------------------------- /blog/en-us/download.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Downloads 3 | keywords: download, dubbo-go 4 | description: this article collect of download resources dubbo-go 5 | --- 6 | 7 | # Downloads 8 | 9 | ## dubbo-go architecture 10 | 11 | [dubbo-go-arch.pptx](../../resource/dubbo-go-arch.pptx) 12 | 13 | ## technical sharing 14 | 15 | * [2017-于雨-dubbogo.pdf](../../resource/2017-于雨-dubbogo.pdf) 16 | 17 | * [DUBBO GO@2019.08.17上海02.pptx](../../resource/DUBBO-GO@2019.08.17上海02.pptx) 18 | 19 | * [dubbogo20191224-shanghai-gopher.pptx](../../resource/dubbogo20191224-shanghai-gopher.pptx) 20 | 21 | * [dubbogo20191228-hangzhou-gopher-邓明.pptx](../../resource/dubbogo20191228-hangzhou-gopher-邓明.pptx) 22 | 23 | * [panty_dubbo-go_share.pptx](../../resource/panty_dubbo-go_share.pptx) -------------------------------------------------------------------------------- /blog/zh-cn/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/blog/zh-cn/.gitkeep -------------------------------------------------------------------------------- /blog/zh-cn/download.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 下载中心 3 | keywords: download, dubbo-go 4 | description: 本文集合了 dubbo-go 的相关下载资料 5 | --- 6 | 7 | # 下载中心 8 | 9 | ## dubbo-go 架构 10 | 11 | [dubbo-go-arch.pptx](../../resource/dubbo-go-arch.pptx) 12 | 13 | ## 技术分享资料 14 | 15 | * [2017-于雨-dubbogo.pdf](../../resource/2017-于雨-dubbogo.pdf) 16 | 17 | * [DUBBO GO@2019.08.17上海02.pptx](../../resource/DUBBO-GO@2019.08.17上海02.pptx) 18 | 19 | * [dubbogo20191224-shanghai-gopher.pptx](../../resource/dubbogo20191224-shanghai-gopher.pptx) 20 | 21 | * [dubbogo20191228-hangzhou-gopher-邓明.pptx](../../resource/dubbogo20191228-hangzhou-gopher-邓明.pptx) 22 | 23 | * [panty_dubbo-go_share.pptx](../../resource/panty_dubbo-go_share.pptx) -------------------------------------------------------------------------------- /blog/zh-cn/dubbo-go-hessian2-1.6.md: -------------------------------------------------------------------------------- 1 | # What's new of Dubbo-go-hessian2 v1.6.0 2 | 3 | 发版人:[望哥](https://github.com/wongoo) 4 | 5 | ## 1. 增加缓存优化 6 | 7 | dubbo-go-hessian2 在解析数据的数据大量使用到了 struct 的结构信息,这部分信息可以缓存起来反复利用,使得性能提升了一倍。优化过程记录可以详细阅读[《记一次对 dubbo-go-hessian2 的性能优化》](https://mp.weixin.qq.com/s/ouVxldQAt0_4BET7srjJ6Q). 8 | 9 | 对应 pr [#179](https://github.com/apache/dubbo-go-hessian2/pull/179),作者 [micln](https://github.com/micln)。 10 | 11 | ## 2. string 解析性能优化 12 | 13 | 由于 hessian ( dubbo 序列化协议,下称:hessian )对 string 的定义是16 bit 的 unicode 的 UTF-8 表示形式,字符长度表示是16 bit 的字符数。这是仅针对 java 制定的规范,java 中一个字符是16 bit,对应到 UTF-16. hessian 库也是对每一个字符进行转码序列化。但 golang 里面字符是和 UTF-8 对应的,dubbo-go-hessian2 里面的 rune 是 32bit,和 unicode一一映射。对于 U+10000 ~ U+10FFFF 的字符,需按照 UTF16 的规范,将字符转换为 2 个字节的代理字符,再做转换,才能和 java 的序列化方式对应起来。 14 | 15 | 原来不管是编码还是解析都是一个字符一个字符处理,特别是解析的时候,从流里面一个字节一个字节读取并组装成 rune,然后再转换为 string,这样效率特别低。我们的优化方案是,批次读取字节流到 buffer 中,对 buffer 进行解析转为 UTF-8 数组,并统计字符数量。其中需要对代理对字符将其转换为标准 UTF-8 子节数组。如果统计的字符数量不足,再进一步读取流种的数据进行解析。通过此方式提升一倍的解析效率。 16 | 17 | 18 | 对应 pr [#188](https://github.com/apache/dubbo-go-hessian2/pull/188),作者 [zonghaishang](https://github.com/zonghaishang)。 19 | 20 | ## 3. 解析忽略不存在的字段 21 | 22 | hessian 库在解析数据的时候,对于一个 class 字段,如果不存在,则直接忽略掉。但 v1.6.0 版本之前 dubbo-go-hessian2 解析数据,如果遇到不存在的字段,会返回 error。从 v1.6.0 开始,与 hessian 一样,忽略不存在的字段。**因为这是一个特性的变更,所以升级的同学一定要注意了。** 23 | 24 | 对应 pr [#201](https://github.com/apache/dubbo-go-hessian2/pull/201),作者 [micln](https://github.com/micln) & 25 | [fangyincheng](https://github.com/fangyincheng)。 26 | 27 | ## 4. 解决浮点数精度丢失问题 28 | 29 | 在对 float32 类型进行序列化时,我们一律强制转换为 float64 再进行序列化操作。由于浮点数的精度问题,在这个转换过程中可能出现小数点后出现多余的尾数,例如 (float32)99.8-->(float64)99.80000305175781。 30 | 31 | 1.6.0 版本对 float32 的序列化进行了优化: 32 | 33 | - 如果小数尾数小于 3 位,根据 hessian2 协议序列化为 double 32-bit 格式 34 | - 否则先转换为 string 类型,再转换为 float64 类型,这样做可以避免由于浮点数精度问题产生多余的尾数,最后对 float64 进行序列化。 35 | 36 | 虽然对 float32 类型进行了优化,但是依然建议使用浮点数的时候优先使用 float64 类型。 37 | 38 | 39 | 对应 pr [#196](https://github.com/apache/dubbo-go-hessian2/pull/196),作者 [willson-chen](https://github.com/willson-chen)。 40 | 41 | 42 | ## 5. 解决 attachment 空值丢失问题 43 | 44 | dubbo 请求中包含 attachment 信息,之前如果 attachment 里面含有如 ``"key1":""``,这种 value 为空的情况,解析出来的结果会直接丢失这个属性 key1 ,v1.6.0 修复了此问题,现在解析出来的 attachment 会正确解析出空 value 的属性。 45 | 46 | 47 | 对应 pr [#191](https://github.com/apache/dubbo-go-hessian2/pull/191),作者 [champly](https://github.com/champly)。 48 | 49 | ## 6. 支持 ‘继承’ 和忽略冗余字段 50 | 51 | 由于 go 没有继承的概念,所以在之前的版本,Java 父类的字段不被 dubbo-go-hessian2 所支持。新版本中,dubbo-go-hessian2 将Java来自父类的字段用匿名结构体对应,如: 52 | 53 | ``` 54 | type Dog struct { 55 | Animal 56 | Gender string 57 | DogName string `hessian:"-"` 58 | } 59 | ``` 60 | 61 | 同时,就像 json 编码中通过 immediately 可以在序列化中忽略该字段,同理,通过 hessian:"-" 用户也可以让冗余字段不参与 hessian 序列化。 62 | 63 | 对应pr [#154](https://github.com/apache/dubbo-go-hessian2/pull/154),作者 [micln](https://github.com/micln) 64 | 65 | ## 欢迎加入 dubbo-go 社区 66 | 钉钉群: [23331795](https://dubbogo.github.io/dubbo-go-website/img/dubbo-go-group.jpg) -------------------------------------------------------------------------------- /blog/zh-cn/grpc-dubbo.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 无缝连接dubbo-go与gRPC 3 | keywords: "gRPC", "protocol" 4 | description: 在dubbo-go中接入gRPC的设计与实现。核心在于实现gRPC protocol,作为一个适配器将dubbo-go和gRPC连接起来。 5 | --- 6 | 7 | # 无缝连接dubbo-go与gRPC 8 | 9 | 最近我们`dubbogo`社区里面,呼声很大的一个`feature`就是对`grpc`的支持。在某位大佬的不懈努力之下,终于弄出来了。 10 | 11 | 今天我就给大家分析一下大佬是怎么连接`dubbogo`和`grpc`。 12 | 13 | ## grpc 14 | 先来简单介绍一下`grpc`。它是`google`推出来的一个`RPC`框架。`grpc`是通过`IDL(Interface Definition Language)`——接口定义语言——编译成不同语言的客户端来实现的。可以说是`RPC`理论的一个非常非常标准的实现。 15 | 16 | 因而`grpc`天然就支持多语言。这几年,它几乎成为了跨语言`RPC`框架的标准实现方式了,很多优秀的`rpc`框架,如`Spring Cloud`和`dubbo`,都支持`grpc`。 17 | 18 | ### server端 19 | 20 | 在`go`里面,`server`端的用法是: 21 | 22 | ![6359d47153533919368ba084e4c1e8db](../../img/blog/dubbogo-grpc/1.png) 23 | 24 | 它的关键部分是:`s := grpc.NewServer()`和`pb.RegisterGreeterServer(s, &server{})`两个步骤。第一个步骤很容易,唯独第二个步骤`RegisterGreeterServer`有点麻烦。为什么呢? 25 | 26 | 因为`pb.RegisterGreeterServer(s, &server{})`这个方法是通过用户定义的`protobuf`编译出来的。 27 | 28 | 好在,这个编译出来的方法,本质上是: 29 | 30 | ![3124a69ad94741617673e6db366b9235](../../img/blog/dubbogo-grpc/2.png) 31 | 32 | 也就是说,如果我们在`dubbogo`里面拿到这个`_Greeter_serviceDesc`,就可以实现这个`server`的注册。因此,可以看到,在`dubbogo`里面,要解决的一个关键问题就是如何拿到这个`serviceDesc`。 33 | 34 | ### client端 35 | 36 | `client`端的用法是: 37 | ![0185e6a53ac2aad323260ea6f4fd8f79](../../img/blog/dubbogo-grpc/3.png) 38 | 39 | 这个东西要复杂一点: 40 | 1. 创建连接:`conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())` 41 | 2. 创建`client`:`c := pb.NewGreeterClient(conn)` 42 | 3. 调用方法:`r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})` 43 | 44 | 第一个问题其实挺好解决的,毕竟我们可以从用户的配置里面读出`address`; 45 | 46 | 第二个问题就是最难的地方了。如同`RegisterGreeterServer`是被编译出来的那样,这个`NewGreeterClient`也是被编译出来的。 47 | 48 | 而第三个问题,乍一看是用反射就能解决,但是我们打开`SayHello`就能看到: 49 | 50 | ![92f4e0d75b865fd40004d1fa59720ff8](../../img/blog/dubbogo-grpc/4.png) 51 | 52 | 结合`greetClient`的定义,很容易看到,我们的关键就在于`err := c.cc.Invoke(ctx, "/helloworld.Greeter/SayHello", in, out, opts...)`。换言之,我们只需要创建出来连接,并且拿到方法、参数就能通过类似的调用来模拟出`c.SayHello`。 53 | 54 | 通过对`grpc`的简单分析,我们大概知道要怎么弄了。还剩下一个问题,就是我们的解决方案怎么和`dubbogo`结合起来呢? 55 | 56 | ## 设计 57 | 58 | 我们先来看一下`dubbogo`的整体设计,思考一下,如果我们要做`grpc`的适配,应该是在哪个层次上做适配。 59 | 60 | ![7beb1e841086b56b696c3852f629edba](../../img/blog/dubbogo-grpc/5.png) 61 | 62 | 我们根据前面介绍的`grpc`的相关特性可以看出来,`grpc`已经解决了`codec`和`transport`两层的问题。 63 | 64 | 而从`cluster`往上,显然`grpc`没有涉及。于是,从这个图里面我们就可以看出来,要做这种适配,那么`protocol`这一层是最合适的。即,我们可以如同`dubbo protocol`那般,扩展出来一个`grpc protocol`。 65 | 66 | 这个`grpc protocol`大体上相当于一个**适配器**,将底层的`grpc`的实现和我们自身的`dubbogo`连接在一起。 67 | 68 | ![1499f43e5c8c924fe8568ae27e6debca](../../img/blog/dubbogo-grpc/6.png) 69 | 70 | ## 实现 71 | 72 | 在`dubbogo`里面,和`grpc`相关的主要是: 73 | 74 | ![427d7b90b96b400128f31b60eb1efcee](../../img/blog/dubbogo-grpc/7.png) 75 | 76 | 我们直接进去看看在`grpc`小节里面提到的要点是如何实现的。 77 | 78 | ### server端 79 | 80 | ![c3b28d649200b795f2cb1595b1b24ec4](../../img/blog/dubbogo-grpc/8.png) 81 | 82 | 这样看起来,还是很清晰的。如同`dubbogo`其它的`protoco`一样,先拿到`service`,而后通过`service`来拿到`serviceDesc`,完成服务的注册。 83 | 84 | 注意一下上图我红线标准的`ds, ok := service.(DubboGrpcService)`这一句。 85 | 86 | 为什么我说这个地方有点奇怪呢?是因为理论上来说,我们这里注册的这个`service`实际上就是`protobuf`编译之后生成的`grpc`服务端的那个`service`——很显然,单纯的编译一个`protobuf`接口,它肯定不会实现`DubboGrpcService`接口: 87 | 88 | ![23adece883da8178e6890ada03691d80](../../img/blog/dubbogo-grpc/9.png) 89 | 90 | 那么`ds, ok := service.(DubboGrpcService)`这一句,究竟怎么才能让它能够执行成功呢? 91 | 92 | 我会在后面给大家揭晓这个谜底。 93 | 94 | ### client端 95 | 96 | `dubbogo`设计了自身的`Client`,作为对`grpc`里面`client`的一种模拟与封装: 97 | ![766984e439a7bfe1925720f081f30249](../../img/blog/dubbogo-grpc/10.png) 98 | 99 | 注意看,这个`Client`的定义与前面`greetClient`的定义及其相似。再看下面的`NewClient`方法,里面也无非就是创建了连接`conn`,而后利用`conn`里创建了一个`Client`实例。 100 | 101 | 注意的是,这里面维护的`invoker`实际上是一个`stub`。 102 | 103 | 当真正发起调用的时候: 104 | 105 | ![59ce727711c907ae5609e7f7e9985f58](../../img/blog/dubbogo-grpc/11.png) 106 | 107 | 红色框框框住的就是关键步骤。利用反射从`invoker`——也就是`stub`——里面拿到调用的方法,而后通过反射调用。 108 | 109 | ### 代码生成 110 | 111 | 前面提到过`ds, ok := service.(DubboGrpcService)`这一句,面临的问题是如何让`protobuf`编译生成的代码能够实现`DubboGrpcService`接口呢? 112 | 113 | 有些小伙伴可能也注意到,在我贴出来的一些代码里面,反射操作会根据名字来获取`method`实例,比如`NewClint`方法里面的`method := reflect.ValueOf(impl).MethodByName("GetDubboStub")`这一句。这一句的`impl`,即指服务的实现,也是`protobuf`里面编译出来的,怎么让`protobuf`编译出来的代码里面含有这个`GetDubboStub`方法呢? 114 | 115 | 到这里,答案已经呼之欲出了:修改`protobuf`编译生成代码的逻辑! 116 | 117 | 庆幸的是,在`protobuf`里面允许我们通过插件的形式扩展我们自己的代码生成的逻辑。 118 | 119 | 所以我们只需要注册一个我们自己的插件: 120 | 121 | ![4ff106d587a317ecc02e2362a92f3e79](../../img/blog/dubbogo-grpc/12.png) 122 | 123 | 然后这个插件会把我们所需要的代码给嵌入进去。比如说嵌入`GetDubboStub`方法: 124 | ![def7f288c859586ca866e57bff0ae9bb](../../img/blog/dubbogo-grpc/13.png) 125 | 126 | 还有`DubboGrpcService`接口: 127 | 128 | ![87eb9e0c79af6d89f16ca566ee7d4f3b](../../img/blog/dubbogo-grpc/14.png) 129 | 130 | 这个东西,属于难者不会会者不难。就是如果你不知道可以通过`plugin`的形式来修改生成的代码,那就是真难;但是如果知道了,这个东西就很简单了——无非就是水磨工夫罢了。 131 | -------------------------------------------------------------------------------- /docs/en-us/developer/design.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: design 3 | keywords: design, 架构设计 4 | description: detailed architecture design for dubbo-go 5 | --- 6 | 7 | resource file: [dubbo-go-arch.pptx](../../../resource/dubbo-go-arch.pptx) 8 | ![dubbo-go-arch](../../../img/doc/dubbo-go-arch.png) 9 | 10 | ![dubbo-go-ext](../../../img/doc/dubbo-go-ext.png) -------------------------------------------------------------------------------- /docs/en-us/source_code/extension.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/source_code/extension.md -------------------------------------------------------------------------------- /docs/en-us/user/configuration/provider.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/configuration/provider.md -------------------------------------------------------------------------------- /docs/en-us/user/preface/architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: architecture 3 | keywords: architecture 4 | description: a brief description of Dubbo-go's overall architecture 5 | --- 6 | 7 | # Architecture 8 | ![architecture](../../../../img/dubbo-go-architecture.png) 9 | 10 | #### Explain for node 11 | * `Registry` : the registry is responsible for service registration and discovery in Dubbo-go 12 | * `Consumer` : the consumer calls remote service 13 | * `Provider` : the provider exposes remote services 14 | 15 | #### Explain for process 16 | * `0. register` : the provider automatically registers its services to the registry while starting 17 | * `1. subscribe` : the consumer subscribes to the services it need from the registration center while starting 18 | * `2. notify` : the registration center returns the service registration information to the consumer, and when the subscribed service changes, it will push the changed data to the consumer 19 | * `3. invoke` : according to the service address obtained from the registry, the consumer selects a suitable service address through the load balancing algorithm to initiate the request 20 | 21 | # Initialization process 22 | 23 | ### Consumer 24 | 25 | ![dubbo-go-client](../../../../img/dubbo-go-client.png) 26 | 27 | ### Provider 28 | 29 | ![dubbo-go-server](../../../../img/dubbo-go-server.png) -------------------------------------------------------------------------------- /docs/en-us/user/registry/consul.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/registry/consul.md -------------------------------------------------------------------------------- /docs/en-us/user/registry/etcdv3.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/registry/etcdv3.md -------------------------------------------------------------------------------- /docs/en-us/user/registry/introduction.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/registry/introduction.md -------------------------------------------------------------------------------- /docs/en-us/user/registry/nacos.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/registry/nacos.md -------------------------------------------------------------------------------- /docs/en-us/user/registry/zookeeper.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/en-us/user/registry/zookeeper.md -------------------------------------------------------------------------------- /docs/zh-cn/developer/design.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 架构设计 3 | keywords: design, 架构设计 4 | description: dubbo-go的详细架构设计 5 | --- 6 | 7 | 源文件:[dubbo-go-arch.pptx](../../../resource/dubbo-go-arch.pptx) 8 | ![dubbo-go-arch](../../../img/doc/dubbo-go-arch.png) 9 | 10 | ![dubbo-go-ext](../../../img/doc/dubbo-go-ext.png) -------------------------------------------------------------------------------- /docs/zh-cn/md/course/dubbo-go-application-dimension-registration-model.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dubbo-go 应用维度注册模型 3 | keywords: Dubbo-go 应用维度注册模型 4 | description: 介绍dubbo-go项目的注册模型 5 | --- 6 | 7 | # [Dubbo-go 应用维度注册模型](https://xie.infoq.cn/article/a6a7e05f8a0d26c5f9f9bbd85) 8 | 9 | **本文作者:邓明(Github flycash)蒋超(Github @Patrick0308)** 10 | 11 | Dubbo 3.0 将至。其最重要的一点就是服务自省,其基础即是应用维度的注册模型,作为目前与 Dubbo 在功能上完全对齐的 Dubbo-go,已于 本年【2020 年】7 月份发布了其 v1.5.0 版本,实现了该模型,为年底实现与 Dubbo 3.0 对齐的新版本奠定了基础。 12 | 13 | Dubbo-go 作为 Dubbo 的 Go 语言版本,因跨语言之故,二者针对同一模型的实现必然有较大差异,故本文注重讨论 Dubbo-go 社区自身对该模型的理解和实现,以及其与 Dubbo 之间的差异。 14 | 15 | ## 1 引语 16 | 17 | 在 v1.5 以前,Dubbo-go 注册模型都是以服务为维度的,直观的理解可认为其是接口维度。譬如注册信息,按照服务维度模型其示例如下: 18 | 19 | ```json 20 | "com.xxx.User":[ 21 | {"name":"instance1", "ip":"127.0.0.1", "metadata":{"timeout":1000}}, 22 | {"name":"instance2", "ip":"127.0.0.2", "metadata":{"timeout":2000}}, 23 | {"name":"instance3", "ip":"127.0.0.3", "metadata":{"timeout":3000}}, 24 | ] 25 | ``` 26 | 27 | 这种模式的好处是不言而喻的,简单直观,提供了细粒度的服务控制手段。 28 | 29 | 而近两年,随着云时代的到来,这种模式就暴露了不足: 30 | 31 | 主流的注册模型都是应用维度的; 32 | 33 | 以服务维度来注册,那么规模与服务数量成正比,大规模集群之下,注册中心压力非常大; 34 | 35 | ## 2 Dubbo-go v1.5.0 的新注册模型 36 | 37 | 这次 Dubbo-go 支持了新的注册模型,也就是应用维度的注册模型。简单而言,在应用维度注册下,其注册信息类似: 38 | 39 | ```jsoon 40 | "application1": [ 41 | {"name":"instance1", "ip":"127.0.0.1", "metadata":{}}, 42 | {"name":"instance2", "ip":"127.0.0.2", "metadata":{}}, 43 | {"name":"instanceN", "ip":"127.0.0.3", "metadata":{}} 44 | ] 45 | ``` 46 | 47 | 在此模式之下,可以看到注册信息将会大幅度减少,集群规模只与实例数量相关。 48 | 49 | 与此同时,在实现这一个功能的时候,Dubbo-go 还希望保持两个目标: 50 | 51 | 对用户完全兼容,用户迁移无感知; 52 | 53 | 保持住原本服务粒度上精细控制的能力——即保留现有的服务维度的元数据; 54 | 55 | 因此 Dubbo-go 要着力解决以下几点: 56 | 57 | 目前 Consumer 的配置是以接口为准的,如何根据接口找到该接口对应的应用?例如,用户配置了 com.xxx.User 服务,那么,Dubbo-go 怎么知道这个服务是由哪个应用来提供的呢? 58 | 59 | 在知道了是哪个应用之后,可以从注册中心拿到应用的注册信息,如实例信息等;那怎么知道 com.xxx.User 服务自身的元数据呢? 60 | 61 | 为了解决这两个问题,在已有的注册模型的基础上,Dubbo-go 引入两个额外的组件:ServiceNameMapping 和 MetadataService。 62 | 63 | 前者用于解决服务-应用之间的映射,后者用于获取服务的元数据。 64 | 65 | 由此,Dubbo-go 的应用维度注册模型就变为: 66 | 67 | ![1.png](../../pic/course/dubbo-go-application-dimension-registration-model-1.png) 68 | 69 | ### 2.1 ServiceNameMapping 70 | 71 | ServiceNameMapping 并不复杂。考虑到一般人在 Consumer 侧想要调用一个服务,其十有八九是知道这个服务是哪个应用提供的,于是 Dubbo-go 引入了新的配置项 provideBy 72 | 73 | ![1.png](../../pic/course/dubbo-go-application-dimension-registration-model-2.png) 74 | 75 | 当然,所谓 “十有八九”就是说有些时候确实不知道是服务是谁提供的,所以 Dubbo-go 还支持了基于配置中心的 ServiceNameMapping 实现。Dubbo-go 会用服务名作为 Key 从配置中心里面读出对应的应用名。这意味着, Provider 启动的时候,也会在配置中心将自身的 服务-应用名映射 写入配置中心。 76 | 77 | ### 2.2 MetadataService 78 | 79 | MetadataService 稍微要复杂一点,有 remote 和 local 两种模式。 80 | 81 | 类似于前面的 ServiceNameMapping,Dubbo-go 提供了基于配置中心的 MetadataService 的实现,即 remote 模式。Provider 启动的时候,就会将服务的元数据写进去。 82 | 83 | 另外一种模式是 local 模式。Dubbo-go 可以直接将 MetadataService 看做是一个普通的微服务,而后由 Provider 所提供。类似于: 84 | 85 | ![1.png](../../pic/course/dubbo-go-application-dimension-registration-model-3.png) 86 | 87 | 由此带来一个问题: 88 | 89 | 既然 Dubbo-go 将 MetadataService 看做是一个普通的服务,那么 MetadataService 的元数据,Consumer 该怎么获得呢?这是一个典型的鸡生蛋蛋生鸡的问题。 90 | 91 | Dubbo-go 的方案非常简单粗暴,Provider 启动的时候,不仅仅往注册中心里面写入应用本身的信息,还要把它的 MetadataService 信息写入。 92 | 93 | 这是一个应用的注册信息: 94 | 95 | ![1.png](../../pic/course/dubbo-go-application-dimension-registration-model-4.png) 96 | 97 | 本质上来说,应用维度注册信息 + 服务元数据 = 服务维度注册信息。或者说,应用维度注册,只是一种重新组织这些信息的方式。 98 | 99 | ## 3 差异与改进 100 | 101 | Dubbo-go v1.5.x 对标 Dubbo 2.7.5,可以认为是参照 Dubbo 2.7.5 直接实现其 Go 源码,但是考虑到 Java 和 Go 之间的语言差异,导致二者之间的实现不可能完全对等。 102 | 103 | ### 3.1 修订版本号 revision 比对 104 | 105 | Dubbo v2.7.x 在 MetadataService 注册时,会对其 provider 应用的所有服务接口的 hash 值做为修订版本号写入元数据中心,此 revision 是对所有接口的方法以及其参数总体的计算结果。其目的是减少 consumer 端到注册中心的拉取次数。 106 | 107 | 在 Go 中用的计算 revision 的 hash 算法与 Java 是不一致的,而且 Go 与 Java 的方法签名信息是不相同的,所以计算出来的 hash 值一定是不一样的。 108 | 109 | 此不一致会导致如果 Go 应用和 Java 应用同时发布同一个服务的时候,Go 服务和 Java 服务的修订版本号必定是不相同的,Consumer 需要分别缓存这两个修订版本的元数据。 110 | 111 | ### 3.2 应用注册时机 112 | 113 | Dubbo-go v1.5.0 实现时,其中一个考量是全面向后兼容 v1.4.x。Dubbo-go v1.5.x 应用 consumer 既可以调用 Dubbo-go v1.4.x 应用的服务,也可以调用 Dubbo v2.6.x 应用的服务,当然也可以调用其对标的 v2.7.x 应用的服务。 114 | 115 | 为了达到兼容性,Dubbo-go v1.5.x 实现时面临一个问题:Dubbo-go provider 应用启动时有一个服务启动成功,把应用信息注册到元数据中心之后,就会把实例注册到注册中心,而 Dubbo 2.7.x 的 provider 应用则是在其所有服务接口的信息注册到元数据中心后才会注册实例! 116 | 117 | 这个问题的后果就是:Dubbo-go v1.5.0 的 provider 每次发布接口到元数据中心的同时,都会触发 Dubbo-go v1.5.0 / Dubbo v2.7.x 的 consumer 应用拉取 Dubbo-go v1.5.0 应用信息,当 provider 发布的服务过多时 consumer 侧性能损耗非常明显! 118 | 119 | Dubbo-go 在 v1.5.1 中已经修复了这个问题,provider 在启动时先将其全部服务接口发布到元数据中心,然后注册实例到注册中心,减少了 consumer 拉取元数据的次数。 120 | 121 | Dubbo-go 项目地址:[https://github.com/apache/dubbo-go](https://github.com/apache/dubbo-go) Dubbo-go 社区交流群:23331795 122 | 123 | ### 欢迎加入 dubbo-go 社区 124 | 125 | 有任何 dubbo-go 相关的问题,可以加我们的钉钉群 23331795 询问探讨,我们一定第一时间给出反馈。 126 | ![1.png](../../pic/course/practice-and-exploration-of-dubbo-go-4.png) 127 | -------------------------------------------------------------------------------- /docs/zh-cn/md/course/the-growth-of-dubbo-go.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 邹毅贤:Dubbo-go 的成长与蜕变之路 3 | keywords: 视频介绍 4 | description: 视频介绍 5 | --- 6 | 7 | # [邹毅贤:Dubbo-go 的成长与蜕变之路](https://m.bilibili.com/video/BV1BV411677w) 8 | 9 | Dubbo-go 虽然有着 “bridge the gap between Java and Go” 的天然使命,但一路走来,已不仅仅是 Dubbo 的一个 Go 语言实现。通过提供可观测、可信性服务保障,快速结合 Dubbo 服务进行互联互通,且有其独特的云原生化实现与使用场景,Dubbo-go 已经走出了自己独特的发展路径。 10 | 11 | [bilibili 的 dubbo-go视频](https://m.bilibili.com/video/BV1BV411677w) -------------------------------------------------------------------------------- /docs/zh-cn/md/hessian2/what's-new-in-dubbo-go-hessian2-v1.6.0.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: What's new in Dubbo-go-hessian2 v1.6.0 3 | keywords: Dubbo-go-hessian2 v1.6.0 4 | description: 介绍 dubbo-go-hessian2的v1.6.0版本新功能 5 | --- 6 | 7 | # [What's new in Dubbo-go-hessian2 v1.6.0](https://my.oschina.net/dubbogo/blog/4318016) 8 | 9 | 发版人:[望哥](https://github.com/wongoo) 10 | 11 | ## 1\. 增加缓存优化 12 | 13 | dubbo-go-hessian2 在解析数据的数据大量使用到了 struct 的结构信息,这部分信息可以缓存起来反复利用,使得性能提升了一倍。优化过程记录可以详细阅读[《记一次对 dubbo-go-hessian2 的性能优化》](https://mp.weixin.qq.com/s/ouVxldQAt0_4BET7srjJ6Q). 14 | 15 | 对应 pr [#179](https://github.com/apache/dubbo-go-hessian2/pull/179),作者 [micln](https://github.com/micln)。 16 | 17 | ## 2\. string 解析性能优化 18 | 19 | 由于 hessian ( dubbo 序列化协议,下称:hessian )对 string 的定义是16 bit 的 unicode 的 UTF-8 表示形式,字符长度表示是16 bit 的字符数。这是仅针对 java 制定的规范,java 中一个字符是16 bit,对应到 UTF-16. hessian 库也是对每一个字符进行转码序列化。但 golang 里面字符是和 UTF-8 对应的,dubbo-go-hessian2 里面的 rune 是 32bit,和 unicode一一映射。对于 U+10000 ~ U+10FFFF 的字符,需按照 UTF16 的规范,将字符转换为 2 个字节的代理字符,再做转换,才能和 java 的序列化方式对应起来。 20 | 21 | 原来不管是编码还是解析都是一个字符一个字符处理,特别是解析的时候,从流里面一个字节一个字节读取并组装成 rune,然后再转换为 string,这样效率特别低。我们的优化方案是,批次读取字节流到 buffer 中,对 buffer 进行解析转为 UTF-8 数组,并统计字符数量。其中需要对代理对字符将其转换为标准 UTF-8 子节数组。如果统计的字符数量不足,再进一步读取流种的数据进行解析。通过此方式提升一倍的解析效率。 22 | 23 | 对应 pr [#188](https://github.com/apache/dubbo-go-hessian2/pull/188),作者 [zonghaishang](https://github.com/zonghaishang)。 24 | 25 | ## 3\. 解析忽略不存在的字段 26 | 27 | hessian 库在解析数据的时候,对于一个 class 字段,如果不存在,则直接忽略掉。但 v1.6.0 版本之前 dubbo-go-hessian2 解析数据,如果遇到不存在的字段,会返回 error。从 v1.6.0 开始,与 hessian 一样,忽略不存在的字段。**因为这是一个特性的变更,所以升级的同学一定要注意了。** 28 | 29 | 对应 pr [#201](https://github.com/apache/dubbo-go-hessian2/pull/201),作者 [micln](https://github.com/micln) & [fangyincheng](https://github.com/fangyincheng)。 30 | 31 | ## 4\. 解决浮点数精度丢失问题 32 | 33 | 在对 float32 类型进行序列化时,我们一律强制转换为 float64 再进行序列化操作。由于浮点数的精度问题,在这个转换过程中可能出现小数点后出现多余的尾数,例如 (float32)99.8-->(float64)99.80000305175781。 34 | 35 | 1.6.0 版本对 float32 的序列化进行了优化: 36 | 37 | * 如果小数尾数小于 3 位,根据 hessian2 协议序列化为 double 32-bit 格式 38 | * 否则先转换为 string 类型,再转换为 float64 类型,这样做可以避免由于浮点数精度问题产生多余的尾数,最后对 float64 进行序列化。 39 | 40 | 虽然对 float32 类型进行了优化,但是依然建议使用浮点数的时候优先使用 float64 类型。 41 | 42 | 对应 pr [#196](https://github.com/apache/dubbo-go-hessian2/pull/196),作者 [willson-chen](https://github.com/willson-chen)。 43 | 44 | ## 5\. 解决 attachment 空值丢失问题 45 | 46 | dubbo 请求中包含 attachment 信息,之前如果 attachment 里面含有如 `"key1":""`,这种 value 为空的情况,解析出来的结果会直接丢失这个属性 key1 ,v1.6.0 修复了此问题,现在解析出来的 attachment 会正确解析出空 value 的属性。 47 | 48 | 对应 pr [#191](https://github.com/apache/dubbo-go-hessian2/pull/191),作者 [champly](https://github.com/champly)。 49 | 50 | ## 6\. 支持 ‘继承’ 和忽略冗余字段 51 | 52 | 由于 go 没有继承的概念,所以在之前的版本,Java 父类的字段不被 dubbo-go-hessian2 所支持。新版本中,dubbo-go-hessian2 将Java来自父类的字段用匿名结构体对应,如: 53 | 54 | ```rust 55 | type Dog struct { 56 | Animal 57 | Gender string 58 | DogName string `hessian:"-"` 59 | } 60 | ``` 61 | 62 | 同时,就像 json 编码中通过 immediately 可以在序列化中忽略该字段,同理,通过 hessian:"-" 用户也可以让冗余字段不参与 hessian 序列化。 63 | 64 | 对应pr [#154](https://github.com/apache/dubbo-go-hessian2/pull/154),作者 [micln](https://github.com/micln) 65 | 66 | ## 欢迎加入 dubbo-go 社区 67 | 68 | 钉钉群: **23331795** 69 | 70 | [github](https://www.oschina.net/p/github)[apache](https://www.oschina.net/p/apache+http+server)[java](https://www.oschina.net/p/java) -------------------------------------------------------------------------------- /docs/zh-cn/md/interview/what's-new-in -dubbo-go-v1.5.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dubbo-go 发布 1.5 版,朝云原生迈出关键一步 3 | keywords: dubbogo go 4 | description: dubbo-go的v1.5.0版本介绍 打通云原生 5 | --- 6 | 7 | # [Dubbo-go 发布 1.5 版,朝云原生迈出关键一步](https://mp.weixin.qq.com/s/zqRmQ3gsdKj47cO22Dwczw) 8 | 9 | ## 引语 10 | 11 | 计算机技术浪潮每 10 年都有一次技术颠覆,相关知识体系最迟每 5 年都会革新一次,大概每两年贬值一半,在应用服务通信框架领域亦然。凡是有长期生命的通信框架,大概有 5 年的成长期和 5 年的稳定成熟期。每个时代都有其匹配的应用通信框架,在 20 年前的 2G 时代,强跨语言跨平台而弱性能的 gRPC 是不会被采用的。 12 | 13 | 每个通信框架,不同的人从不同角度看出不同的结论:初学者看重易用易学,性能测评者注重性能,应用架构师考虑其维护成本,老板则考虑则综合成本。一个应用通信框架的性能固然重要,其稳定性和进化能力更重要,得到有效维护的框架可在长时间单位内降低其综合成本:学习成本、维护成本、升级成本和更换成本。 14 | 15 | 什么是 Dubbo-go?第一,它是 Dubbo 的 Go 语言版本,全面兼容 Dubbo 是其第一要义。第二,它是一个 Go 语言应用通信框架,会充分利用作为云原生时代第一语言---Go 语言的优势,扩展 dubbo 的能力。 16 | 17 | 2008 年诞生的 Dubbo 已有十多年历史,依靠阿里和其社区,历久弥新。2016 年发布的 Dubbo-go 也已进入第五个年头,如今全面兼容 Dubbo v2.7.x 的 Dubbo-go v1.5 终于发布了。 18 | 19 | 回首过往,Dubbo-go 已经具备如下能力: 20 | 21 | - 互联互通:打通了 gRPC 和 Spring Cloud 生态; 22 | 23 | - 可观测性:基于 OpenTracing 和 Prometheus,使得其在 Logging、Tracing 和 Metrics 方面有了长足进步; 24 | 25 | - 云原生:Dubbo-go 实现了基于 Kubernetes API Server 为注册中心的通信能力,做到了升级成本最低。 26 | 27 | 毋庸讳言,相较于现有成绩,发展阶段的 Dubbo-go 对未来有更多的期待之处: 28 | 29 | - 易用性:Dubbo-go 的入门成本并不低,把很多感兴趣者挡在了门外。但好消息是,随着 Dubbo-go 在阿里内部的逐步推开,阿里中间件团队对其进行了进一步的封装,经生产环境检验后会开放给社区使用。 30 | 31 | - 云原生:目前的 Dubbo-go 的基于 kubernetes 的方案,从技术分层角度来看, Kubernetes API Server 终究是系统的运维态组件,不应该暴露给应用层,否则会造成 APIServer 自身通信压力过大,且系统整体风险很高:应用层使用不当,或者框架自身的流量方面的 bug,可能会把 APiServer 打垮,后果就是造成整体后端服务能力的瘫痪!所以应用层需要感知的是 kubernetes 提供给应用层的 Operator,不断进化的 Dubbo-go 计划在 v1.6 版本中发布 Dubbo-go Operator。 32 | 33 | 雄关漫道真如铁,而今迈步从头越。Dubbo-go 社区【钉钉群 23331795】与 Dubbo-go 同在。 34 | 35 | ## 应用维度注册模型 36 | 37 | 经过一段时间的努力之后,我们终于完成了应用维度的服务注册与发现。和原本已有的接口维度的注册模型比起来,新的注册模型有两个突出特点: 38 | 39 | - 1.和主流的注册模型保持一致。目前的主流做法都是按照应用为基本单位来进行注册的,如 Spring Cloud。在支持应用维度注册之后,对于接下来的云原生支持,奠定了基础; 40 | 41 | - 2.大幅度减轻对注册中心的压力。在该模型之下,从注册中心的视角看过去,集群规模只和实例数量成正比,而不是现有的和服务数量成正比; 42 | 43 | 当然,我们在设计的时候就考虑到了用户的迁移成本。要迁移到新的注册模型,只需要将现有使用的注册中心换成新的 `ServiceDiscoveryRegistry` 就可以。 44 | 45 | ServiceDiscoveryRegistry 是支持多种实现的。目前来说,我们支持: 46 | 47 | - nacos; 48 | 49 | - etcd; 50 | 51 | - zookeeper; 52 | 53 | 我们提倡新上线的业务尽量使用 nacos 和 etcd 这种更可靠稳定的注册中心。 54 | 55 | ## Metadata Report 元数据中心 56 | 57 | v1.5 版本在支持应用维度注册模型时,有很重要的一个问题需要解决,即接口维度的元数据存储。服务维度的注册模型和应用维度的注册模型,本质的区别是往注册中心注册的数据维度的不一致。虽然我们在应用维度注册模型中,将接口维度的数据从注册中心中剔除了,但是在 rpc 的框架中,一个 consumer 要想真正找到想要调用的服务地址,就必须得到 provider 端开放的服务信息。这部分数据,在 v1.5 版本中,我们将它们存储到了元数据中心中。 58 | 59 | 元数据中心,是一个接口定义。泛指一块存储区域,可以对接口级别的元数据进行存储、读取,provider 端调用存储,consumer 端调用读取。元数据中心中的数据需要保持准确性、实时性。 60 | 61 | 目前元数据中心,有两个父类(Go 中没有继承,此处说的父子类,单纯指子类对父类的组合关系)实现,一个是 local 实现,一个是 remote 实现。local 实现是将 provider 的内存作为虚拟元数据中心,remote 实现是指依赖 ZooKeeper、etcd、nacos 等注册中心作为元数据中心。目前 remote 有 zookeeper、nacos、etcd 和 consul 的子类实现。即用户可以将元数据信息,通过以上的第三方注册中心进行数据存储和分发。 62 | 63 | ## Invocation 接口支持 attribute 属性 64 | 65 | invocation 结构中新增 attribute 属性支持,用于流程内部的属性存储。和 attachment 不同点在于,attachment 会从 consumer 传递到 provider,但 attribute 属性不会。 66 | 67 | ## k8s 注册中心 68 | 69 | 在 v1.5 版本之前,k8s 注册中心的实现是通过直接使用 k8s client 中 Pod 对象的 List&&Watch 接口。在本次迭代中引入了 k8s informer。这样做的原因在于两点,首先一定的程度上来讲 dubbo-go 的 k8s 注册中心也是一个 k8s controller,使用 informer 的模式更加 k8s native。更重要的是社区计划后续向 CRD+Operator 的模式演进,informer 模式是对后续的演进的探索。除了这个铺垫之外,本次迭代还对跨 namespace 的服务发现做了支持。再有就是为了减少对 kube-apiserver List&&Watch 的压力,对 provider 和 consumer 的行为进行了区分,provider 不再进行 Watch 而仅对 kube-apiserver 进行写操作。 70 | 71 | ## 优化路由模型 72 | 73 | 在 1.5 版本之前,Router 模型中属性是包含:优先级与路由属性,Router Chain 只包含路由属性。从中能识别出其实 Router Chain 也是一种特殊 Router。1.5 版本之后,使 Router 更抽象,分离出其优先级属性,新增 Priority Router、Chain 继承 Router 使其变为特殊的 Router,使关系上看起来更加清晰。如下图: 74 | 75 | ![](../../pic/interview/what's-new-in-dubbo-go-v1.5-1.png) 76 | 77 | ## 回顾与展望 78 | 79 | Dubbo-go 处于一个比较稳定成熟的状态。目前新版本正处于往云原生方向的尝试,应用服务维度注册是首先推出的功能,这是一个和之前模型完全不一样的新注册模型。该版本是我们朝云原生迈进新一步的关键版本。除此之外,包含在该版本也有一些之前提到的优化。 80 | 81 | 下一个版本 v1.5.1,虽然仍是以兼容 Dubbo 2.7.x 为主要任务,但在分布式能力的增强上,也是我们关注的重点。 82 | 83 | 在分布式事务方面,有一个重要的基于 Seata 扩展实现。通过增加过滤器,在服务端接收 xid 并结合 seata-golang[2] 达到支持分布式事务的目的。 从而使 Dubbo-go 在分布式场景下,让用户有更多的选择,能适应更多的个性化场景。 84 | 85 | 与此同时,在传输链路安全性上,TLS 安全传输链路是该版本重要功能之一。通过提供统一入口,未来能引入更多的与传输链路安全性相关的功能,适应用户不一样的使用场景。 86 | 87 | 注册中心模型上,支持多注册中心集群负载均衡。业务部署假设是双注册中心(图 1 ),从原来双注册中心中所有 Provider 一起选址。优化成选址时的多了一层注册中心集群间的负载均衡(图 2 )。 88 | 89 | ![](../../pic/interview/what's-new-in-dubbo-go-v1.5-2.png) 90 | 91 | (图 1 ) 92 | 93 | ![](../../pic/interview/what's-new-in-dubbo-go-v1.5-3.png) 94 | 95 | (图 2 ) 96 | 97 | 以前的 dubbo-go RPC 层直接复用了 getty 框架 的 RPC[3],未能实现协议和应用通信地址的隔离。阿里中间件展图同学重构了 dubbo-go RPC 层,实现了连接复用:可以实现 consumer 与 provider 端的同一个 TCP 连接上进行多协议通信。相关 PR 业已合并,会在 dubbo-go v1.5.1 中发布。 98 | 99 | 目前下一个版本正在紧锣密鼓的开发中,具体规划及任务清单[1] ,都已经在 Github 上体现。 100 | 101 | [1] : https://github.com/apache/dubbo-go/projects/8 102 | 103 | [2] : https://github.com/seata-golang/seata-golang 104 | 105 | [3]: https://github.com/AlexStocks/getty/tree/master/rpc 106 | -------------------------------------------------------------------------------- /docs/zh-cn/md/rpc/dubb-go-adaptive-grpc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 无缝衔接 gRPC 与 dubbo-go 3 | keywords: gRPC dubbo-go 4 | description: 介绍了如何无缝衔接 gRPC 与 dubbo-go 5 | --- 6 | 7 | # [无缝衔接 gRPC 与 dubbo-go](https://developer.aliyun.com/article/742946) 8 | 9 | [中间件小哥](https://developer.aliyun.com/profile/g6g63f3lanvck) 2020-01-19 1530 浏览量 10 | 11 | **简介:** 12 | 13 | 最近我们 dubbo-go 社区里面,呼声很大的一个 feature 就是对 gRPC 的支持。在某位大佬的不懈努力之下,终于弄出来了。 14 | 15 | 今天我就给大家分析一下大佬是怎么连接 dubbo-go 和 gRPC 。 16 | 17 | ## gRPC 18 | 19 | 先来简单介绍一下 gRPC 。它是 Google 推出来的一个 RPC 框架。gRPC 是通过 IDL ( Interface Definition Language )——接口定义语言——编译成不同语言的客户端来实现的。可以说是 RPC 理论的一个非常非常标准的实现。 20 | 21 | 因而 gRPC 天然就支持多语言。这几年,它几乎成为了跨语言 RPC 框架的标准实现方式了,很多优秀的 rpc 框架,如 Spring Cloud 和 dubbo ,都支持 gRPC 。 22 | 23 | server 端 24 | 25 | 在 Go 里面,server 端的用法是: 26 | ![1](../../pic/rpc/dubb-go-adaptive-grpc-a.png "1") 27 | 28 | 它的关键部分是:`s := grpc.NewServer()`和`pb.RegisterGreeterServer(s, &server{})`两个步骤。第一个步骤很容易,唯独第二个步骤`RegisterGreeterServer`有点麻烦。为什么呢? 29 | 30 | 因为`pb.RegisterGreeterServer(s, &server{})`这个方法是通过用户定义的`protobuf`编译出来的。 31 | 32 | 好在,这个编译出来的方法,本质上是: 33 | 34 | ![2](../../pic/rpc/dubb-go-adaptive-grpc-b.png "2") 35 | 36 | 也就是说,如果我们在 dubbo-go 里面拿到这个 \_Greeter_serviceDesc ,就可以实现这个 server 的注册。因此,可以看到,在 dubbo-go 里面,要解决的一个关键问题就是如何拿到这个 serviceDesc 。 37 | 38 | ## Client 端 39 | 40 | Client 端的用法是: 41 | ![3](../../pic/rpc/dubb-go-adaptive-grpc-c.png "3") 42 | 43 | 这个东西要复杂一点: 44 | 1、创建连接:conn, err := grpc.Dial(address) 45 | 2、创建 client:c := pb.NewGreeterClient(conn) 46 | 3、调用方法:r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) 47 | 48 | 第一个问题其实挺好解决的,毕竟我们可以从用户的配置里面读出 address ; 49 | 50 | 第二个问题就是最难的地方了。如同 RegisterGreeterServer 是被编译出来的那样,这个 NewGreeterClient 也是被编译出来的。 51 | 52 | 而第三个问题,乍一看是用反射就能解决,但是我们打开 SayHello 就能看到: 53 | ![4](../../pic/rpc/dubb-go-adaptive-grpc-d.png "4") 54 | 55 | 结合 greetClient 的定义,很容易看到,我们的关键就在于 err := c.cc.Invoke ( ctx, "/helloworld.Greeter/SayHello", in, out, opts... )。换言之,我们只需要创建出来连接,并且拿到方法、参数就能通过类似的调用来模拟出 c.SayHello 。 56 | 57 | 通过对 gRPC 的简单分析,我们大概知道要怎么弄了。还剩下一个问题,就是我们的解决方案怎么和 dubbo-go 结合起来呢? 58 | 59 | ## 设计 60 | 61 | 我们先来看一下 dubbo-go 的整体设计,思考一下,如果我们要做 gRPC 的适配,应该是在哪个层次上做适配。 62 | ![5](../../pic/rpc/dubb-go-adaptive-grpc-e.png "5") 63 | 64 | 我们根据前面介绍的 gRPC 的相关特性可以看出来,gRPC 已经解决了 codec 和 transport 两层的问题。 65 | 66 | 而从 cluster 往上,显然 gRPC 没有涉及。于是,从这个图里面我们就可以看出来,要做这种适配,那么 protocol 这一层是最合适的。即,我们可以如同 dubbo protocol 那般,扩展出来一个 grpc protocol 。 67 | 68 | 这个 gRPC protocol 大体上相当于一个适配器,将底层的 gRPC 的实现和我们自身的 dubbo-go 连接在一起。 69 | 70 | ![6](../../pic/rpc/dubb-go-adaptive-grpc-f.png "6") 71 | 72 | ## 实现 73 | 74 | 在 dubbo-go 里面,和 gRPC 相关的主要是: 75 | 76 | ![7](../../pic/rpc/dubb-go-adaptive-grpc-g.png "7") 77 | 78 | 我们直接进去看看在 gRPC 小节里面提到的要点是如何实现的。 79 | 80 | ### server 端 81 | 82 | ![8](../../pic/rpc/dubb-go-adaptive-grpc-h.png "8") 83 | 84 | 这样看起来,还是很清晰的。如同 dubbo- go 其它的 protocol 一样,先拿到 service ,而后通过 service 来拿到 serviceDesc ,完成服务的注册。 85 | 86 | 注意一下上图我红线标准的 ds, ok := service.(DubboGrpcService) 这一句。 87 | 88 | 为什么我说这个地方有点奇怪呢?是因为理论上来说,我们这里注册的这个 service 实际上就是 protobuf 编译之后生成的 gRPC 服务端的那个 service ——很显然,单纯的编译一个 protobuf 接口,它肯定不会实现 DubboGrpcService 接口: 89 | 90 | ![9](../../pic/rpc/dubb-go-adaptive-grpc-n.png "9") 91 | 92 | 那么 ds, ok := service.(DubboGrpcService) 这一句,究竟怎么才能让它能够执行成功呢? 93 | 94 | 我会在后面给大家揭晓这个谜底。 95 | 96 | ## Client 端 97 | 98 | dubbo-go 设计了自身的 Client ,作为对 gRPC 里面 Client 的一种模拟与封装: 99 | ![10](../../pic/rpc/dubb-go-adaptive-grpc-i.png "10") 100 | 101 | 注意看,这个 Client 的定义与前面 greetClient 的定义及其相似。再看下面的 NewClient 方法,里面也无非就是创建了连接 conn ,而后利用 conn 里创建了一个 Client 实例。 102 | 103 | 注意的是,这里面维护的 invoker 实际上是一个 stub 。 104 | 105 | 当真正发起调用的时候: 106 | 107 | ![11](../../pic/rpc/dubb-go-adaptive-grpc-j.png "11") 108 | 109 | 红色框框框住的就是关键步骤。利用反射从 invoker ——也就是 stub ——里面拿到调用的方法,而后通过反射调用。 110 | 111 | ### 代码生成 112 | 113 | 前面提到过 ds, ok := service.(DubboGrpcService) 这一句,面临的问题是如何让 protobuf 编译生成的代码能够实现 DubboGrpcService 接口呢? 114 | 115 | 有些小伙伴可能也注意到,在我贴出来的一些代码里面,反射操作会根据名字来获取 method 实例,比如 NewClient 方法里面的 method := reflect.ValueOf(impl).MethodByName("GetDubboStub")这一句。这一句的 impl,即指服务的实现,也是 protobuf 里面编译出来的,怎么让 protobuf 编译出来的代码里面含有这个 GetDubboStub 方法呢? 116 | 117 | 到这里,答案已经呼之欲出了:修改 protobuf 编译生成代码的逻辑! 118 | 119 | 庆幸的是,在 protobuf 里面允许我们通过插件的形式扩展我们自己的代码生成的逻辑。 120 | 121 | 所以我们只需要注册一个我们自己的插件: 122 | ![12](../../pic/rpc/dubb-go-adaptive-grpc-k.png "12") 123 | 124 | 然后这个插件会把我们所需要的代码给嵌入进去。比如说嵌入`GetDubboStub`方法: 125 | ![13](../../pic/rpc/dubb-go-adaptive-grpc-l.png "13") 126 | 127 | 还有`DubboGrpcService`接口: 128 | 129 | ![14](../../pic/rpc/dubb-go-adaptive-grpc-m.png "14") 130 | 131 | 这个东西,属于难者不会会者不难。就是如果你不知道可以通过`plugin`的形式来修改生成的代码,那就是真难;但是如果知道了,这个东西就很简单了——无非就是水磨工夫罢了。 132 | 133 | **作者信息:**邓明,毕业于南京大学,就职于 eBay Payment 部门,负责退款业务开发。 134 | 135 | 编解码 自然语言处理 Dubbo Java 应用服务中间件 Go Spring 136 | -------------------------------------------------------------------------------- /docs/zh-cn/md/service-governance/dubbo-go-metrics-design.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: eBay 邓明:dubbo-go 中 metrics 的设计 3 | keywords: dubbo-go metrics 4 | description: 介绍了dubbo-go 中 metrics 的设计 5 | --- 6 | 7 | # [eBay 邓明:dubbo-go 中 metrics 的设计](https://mp.weixin.qq.com/s/_ibXd2z1RqjOJwk7jMAwig) 8 | 9 | 发布于:2020 年 4 月 22 日 17:15 10 | 11 | 最近因为要在 Apache/dubbo-go(以下简称 dubbo-go )里面实现类似的这个 metrics 功能,于是花了很多时间去了解现在 Dubbo 里面的 metrics 是怎么实现的。该部分,实际上是被放在一个独立的项目里面,即 metrics 。 12 | 13 | 总体上来说,Dubbo 的 metrics 是一个从设计到实现都非常优秀的模块,理论上来说,大部分的 Java 项目是可以直接使用 metrics 的。但也因为兼顾性能、扩展性等各种非功能特性,所以初看代码会有种无从下手的感觉。 14 | 15 | 今天这篇文章将会从比较大的概念和抽象上讨论一下 dubbo-go 中的 metrics 模块的设计——实际上也就是 Dubbo 中的 metrics 的设计。因为我仅仅是将 Dubbo 里面的相关内容在 dubbo-go 中复制一份。 16 | 17 | 目前 dubbo-go 的 metrics 刚刚开始起步,第一个 PR 是: 18 | 19 | ## 总体设计 20 | 21 | **Metric** 22 | 23 | 要想理解 metrics 的设计,首先要理解,我们需要收集一些什么数据。我们可以轻易列举出来在 RPC 领域里面我们所关心的各种指标,诸如每个服务的调用次数,响应时间;如果更加细致一点,还有各种响应时间的分布,平均响应时间,999 线…… 24 | 25 | 但是上面列举的是从数据的内容上划分的。 metrics 在抽象上,则是摒弃了这种划分方式,而是结合了数据的特性和表现形式综合划分的。 26 | 27 | 从源码里面很容易找到这种划分的抽象。 28 | 29 | metrics 设计了 Metric 接口作为所有数据的顶级抽象: 30 | 31 | 在 Dubbo 里面,其比较关键的子接口是: 32 | 33 | 为了大家理解,这里我抄一下这些接口的用途: 34 | 35 | * Gauge: 一种实时数据的度量,反映的是瞬态的数据,不具有累加性,例如当前 JVM 的线程数; 36 | * Counter: 计数器型指标,适用于记录调用总量等类型的数据; 37 | * Histogram : 直方分布指标,例如,可以用于统计某个接口的响应时间,可以展示 50%, 70%, 90% 的请求响应时间落在哪个区间内; 38 | * Meter: 一种用于度量一段时间内吞吐率的计量器。例如,一分钟内,五分钟内,十五分钟内的 qps 指标; 39 | * Timer: Timer 相当于 Meter+Histogram 的组合,同时统计一段代码,一个方法的 qps,以及执行时间的分布情况; 40 | 41 | 目前 dubbo-go 只实现了 FastCompass ,它也是 Metric 的子类: 42 | 43 | 这个接口功能很简单,就是用于收集一段时间之内的 subCategory 执行的次数和响应时间。 subCategory 是一个比较宽泛的概念,无论是在 Dubbo 还是在 dubbo-go 里面,一个典型的 subCategory 就会是某个服务。 44 | 45 | 这里的设计要点在于,它是从什么角度上去做这些数据的抽象的。 46 | 47 | 很多人在开发这种采集数据的相关系统或者功能的时候,最容易陷入的就是从数据内容上做抽象,例如抽象一个接口,里面的方法就是获得服务的调用次数或者平均响应时间等。 48 | 49 | 这种抽象并非不可以,尤其是在简单系统里面,还非常好用。唯独在通用性和扩展性上要差很多。 50 | 51 | **MetricManager** 52 | 53 | 在我们定义了 Metric 之后,很容易就想到,我要有一个东西来管理这些 Metric 。这就是 MetricManager ——对应到 Dubbo 里面的 IMetricManager 接口。 54 | 55 | MetricManager 接口目前在 dubbo-go 里面还很简单: 56 | 57 | 本质上来说,我在前面提到的那些 Metric 的子类,都可以从这个 MetricManager 里面拿到。它是对外的唯一入口。 58 | 59 | 因此无论是上报采集的数据,还是某些功能要用这些采集的数据,最重要的就是获得一个 MetricManager 的实例。例如我们最近正在开发的接入 Prometheus 就是拿到这个 MetriManger 实例,而后从里面拿到 FastCompass 的实例,而后采集这些数据: 60 | 61 | **MetricRegistry** 62 | 63 | MetricRegistry 是一个对 Metric 集合的抽象。 MetricManager 的默认实现里面,就是使用 MetricRegistry 来管理 Metric 的: 64 | 65 | 所以,本质上它就是提供了一些注册 Metric 然后再从里面捞出来的方法。 66 | 67 | 于是,这就有一个问题了:为什么我在有了 MetricManager 之后,还有有一个 MetricRegistry?似乎这两个功能有些重叠? 68 | 69 | 答案大概是两个方面: 70 | 1、除了管理所有的 Metric 之外,还承担着额外的功能,这些功能典型的就是 IsEnabled 。而实际上,在未来我们会赋予它管理生命周期的责任,比如说在 Dubbo 里面,该接口就还有一个 clear 方法; 71 | 2、 metrics 里面还有一个 group 的概念,而这只能由 MetricManager 来进行管理,至少交给 MetricRegistry 是不合适的。 72 | 73 | metrics 的 group 说起来也很简单。比如在 Dubbo 框架里面采集的数据,都会归属于 Dubbo 这个 group 。也就是说,如果我想将非框架层面采集的数据——比如纯粹的业务数据——分隔出来,就可以借用一个 business group 。又或者我采集到的机器自身的数据,可以将其归类到 system 这个 group 下。 74 | 75 | 所以 MetricManger 和 MetricRegistry 的关系是: 76 | 77 | Clock 抽象是一个初看没什么用,再看会觉得其抽象的很好。Clock 里面就两个方法: 78 | 79 | 一个是获得时间戳,另外一个则是获得时间周期 (Tick)。比如通常采集数据可能是每一分钟采集一次,所以你得知道现在处在哪个时间周期里面。Clock 就提供了这种抽象。 80 | 81 | 很多人在实现自己的这种 metrics 的框架的时候,大多数都是直接使用系统的时钟,也就是系统的时间戳。于是所有的 Metic 在采集数据或者上报数据的时候,不得不自己去处理这种时钟方面的问题。 82 | 83 | 这样不同的 Metric 之间就很难做到时钟的同步。比如说可能在某个 Metric1 里面,采集周期是当前这一分钟,而 Metric2 是当前这一分钟的第三十秒到下一分钟的第三十秒。虽然它们都是一分钟采集一次,但是这个周期就对不上了。 84 | 85 | 另外一个有意思的地方在于,Clock 提供的这种抽象,允许我们不必真的按照现实时间的时间戳来处理。比如说,可以考虑按照 CPU 的运行时间来设计 Clock 的实现。 86 | 87 | ## 例子 88 | 89 | 就用这一次 PR 的内容来展示一下这个设计。 90 | 91 | 在 dubbo-go 里面这次实现了 metricsFilter ,它主要就是收集调用次数和响应时间,其核心是: 92 | 93 | report 其实就是把 metrics reports 给 MetricManager : 94 | 95 | 所以,这里面可以看出来,如果我们要收集什么数据,也是要先获得 MetricManager 的实例。 96 | 97 | FastCompass 的实现里面会将这一次调用的服务及其响应时间保存下来。而后在需要的时候再取出来。 98 | 99 | 所谓的需要的时候,通常就是上报给监控系统的时候。比如前面的提到的上报给 Prometheus。 100 | 101 | 所以这个流程可以抽象表达为: 102 | 103 | 这是一个更加宽泛的抽象。也就是意味着,我们除了可以从这个 metricFilter 里面收集数据,也可以从自身的业务里面去收集数据。比如说统计某段代码的执行时间,一样可以使用 FastCompass 。 104 | 105 | 而除了 Prometheus ,如果用户自己的公司里面有监控框架,那么他们可以自己实现自己的上报逻辑。而上报的数据则只需要拿到 MetricManager 实例就能拿到。 106 | 107 | ## 总结 108 | 109 | 本质上来说,整个 metrics 可以看做是一个巨大无比的 provider-conumer 模型。 110 | 111 | 不同的数据会在不同的地方和不同时间点上被采集。有些人在读这些源码的时候会有点困惑,就是这些数据什么时间点会被采集呢? 112 | 113 | 它们只会在两类时间点采集: 114 | 1、实时采集。如我上面举例的 metricsFilter ,一次调用过来,它的数据就被采集了; 115 | 2、另外一个则是如同 Prometheus 。每次 Prometheus 触发了 collect 方法,那么它就会把每种(如 Meter, Gauge )里面的数据收集过来,然后上报,可以称为是定时采集; 116 | 117 | 这些具体的实现,我就不一一讨论了,大家有兴趣可以去看看源码。这些数据,也是我们 dubbo-go 后面要陆续实现的东西,欢迎大家持续关注,或者来贡献代码。 -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-arch.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-i.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-j.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-design-implement-and-featrues-k.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-ext.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-one-year-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-one-year-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-one-year-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-one-year-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-one-year-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-one-year-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-one-year-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-one-year-4.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-one-year-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-one-year-5.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-0.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-a.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-b.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-c.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-d.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-e.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-f.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-g.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-h.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-h.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-i.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-i.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-j.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-j.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-k.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-k.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-l.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-l.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-m.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-n.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-o.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-p.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-q.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-q.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-r.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-r.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-s.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-t.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-u.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-v.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-v.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-w.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-w.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-x.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-y.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-y.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/arch/dubbo-go-review-and-future-z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/arch/dubbo-go-review-and-future-z.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-a.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/config-center/how-to-implement-remote-configuration-management-in-dubbo-go-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/dubbo-go-application-dimension-registration-model-4.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/mosn-dubbo-go-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/mosn-dubbo-go-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/mosn-dubbo-go-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/mosn-dubbo-go-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/mosn-dubbo-go-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/mosn-dubbo-go-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/mosn-dubbo-go-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/mosn-dubbo-go-4.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/mosn-dubbo-go-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/mosn-dubbo-go-5.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/practice-and-exploration-of-dubbo-go-4.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/ten-year-dubbo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/ten-year-dubbo-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/ten-year-dubbo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/ten-year-dubbo-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/course/the-5th-years-of-dubbo-go-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/getty/getty_connected_udp_socket.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/getty/getty_connected_udp_socket.gif -------------------------------------------------------------------------------- /docs/zh-cn/pic/getty/getty_dns_udp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/getty/getty_dns_udp.gif -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/dubbo-go-hessian2-performance-optimization-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/mosn-performance-optimization-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/mosn-performance-optimization-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/mosn-performance-optimization-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/mosn-performance-optimization-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/mosn-performance-optimization-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/mosn-performance-optimization-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/hessian2/mosn-performance-optimization-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/hessian2/mosn-performance-optimization-4.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/dubbo-go-published-a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/dubbo-go-published-a.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/dubbo-go-published-b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/dubbo-go-published-b.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/dubbo-go-published-c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/dubbo-go-published-c.jpg -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.4.0-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/interview/what's-new-in-dubbo-go-v1.5-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-2.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/design-and-implementation-of-dubbo-go-and-k8s-registry-3.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-i.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/registry-center/dubbo-go-registry-center--nacos-j.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-i.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/routing-rule/how-to-implement-routing-rule-in-dubbo-go-j.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-i.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-j.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-k.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-l.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-m.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubb-go-adaptive-grpc-n.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/rpc/dubbo-go-trusted-RPC-call-implementation-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/rpc/dubbo-go-trusted-RPC-call-implementation-1.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-sentinel-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-sentinel-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-sentinel-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-sentinel-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-a.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-b.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-c.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-d.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-e.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-f.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-g.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-h.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-i.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/dubbo-go-tps-limit-design-and-implement-j.png -------------------------------------------------------------------------------- /docs/zh-cn/pic/service-governance/implementation-of-rest-protocol-in-dubbo-go-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/pic/service-governance/implementation-of-rest-protocol-in-dubbo-go-1.jpeg -------------------------------------------------------------------------------- /docs/zh-cn/source_code/extension.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/source_code/extension.md -------------------------------------------------------------------------------- /docs/zh-cn/user/configuration/provider.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/configuration/provider.md -------------------------------------------------------------------------------- /docs/zh-cn/user/preface/architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 架构 3 | keywords: 架构 4 | description: 对dubbo-go整体架构的概要描述 5 | --- 6 | 7 | # 架构 8 | ![architecture](../../../../img/dubbo-go-architecture.png) 9 | 10 | #### 节点说明 11 | 12 | * `Registry` : dubbo-go中负责服务注册与发现的注册中心 13 | * `Consumer` : 调用远程服务的服务消费方 14 | * `Provider` : 暴露服务的服务提供方 15 | 16 | #### 过程说明 17 | * `0. register` : 当服务提供方在启动的时候,会自动将自己的服务注册到注册中心 18 | * `1. subscribe` : 服务消费方会在启动的时候,向注册中心订阅自己所需要的服务 19 | * `2. notify` : 注册中心返回服务注册的信息给到服务消费方,当订阅的服务发生变更,会推送变更的数据给到消费方 20 | * `3. invoke` : 服务消费者根据从注册中心获得的服务地址,经过负载均衡算法选出一个合适的服务地址发起请求 21 | 22 | # 初始化流程 23 | 24 | ### 消费端 25 | 26 | ![dubbo-go-client](../../../../img/dubbo-go-client.png) 27 | 28 | ### 服务端 29 | 30 | ![dubbo-go-server](../../../../img/dubbo-go-server.png) -------------------------------------------------------------------------------- /docs/zh-cn/user/registry/consul.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/registry/consul.md -------------------------------------------------------------------------------- /docs/zh-cn/user/registry/etcdv3.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/registry/etcdv3.md -------------------------------------------------------------------------------- /docs/zh-cn/user/registry/introduction.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/registry/introduction.md -------------------------------------------------------------------------------- /docs/zh-cn/user/registry/nacos.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/registry/nacos.md -------------------------------------------------------------------------------- /docs/zh-cn/user/registry/zookeeper.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/docs/zh-cn/user/registry/zookeeper.md -------------------------------------------------------------------------------- /google7362984ffdc17d37.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google7362984ffdc17d37.html -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | require('babel-register')(); 2 | const gulp = require('gulp'); 3 | const gutil = require('gulp-util'); 4 | const webpack = require('webpack'); 5 | const opn = require('opn'); 6 | const WebpackDevServer = require('webpack-dev-server'); 7 | const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); 8 | const siteConfig = require('./site_config/site.js').default; 9 | const webpackConfig = require('./webpack.config.js'); 10 | 11 | const port = siteConfig.port || 8080; 12 | 13 | // The development server (the recommended option for development) 14 | gulp.task('default', ['webpack-dev-server']); 15 | 16 | // Production build 17 | gulp.task('build', ['webpack:build']); 18 | 19 | gulp.task('webpack-dev-server', () => { 20 | // modify some webpack config options 21 | const myConfig = Object.create(webpackConfig); 22 | myConfig.plugins.push(new webpack.SourceMapDevToolPlugin({})); 23 | // Start a webpack-dev-server 24 | new WebpackDevServer(webpack(myConfig), { 25 | publicPath: `http://127.0.0.1:${port}/build/`, 26 | stats: { 27 | colors: true 28 | } 29 | }).listen(port, '127.0.0.1', (err) => { 30 | if (err) throw new gutil.PluginError('webpack-dev-server', err); 31 | opn(`http://127.0.0.1:${port}/`); 32 | gutil.log('[webpack-dev-server]', `http://127.0.0.1:${port}/webpack-dev-server/index.html`); 33 | }); 34 | }); 35 | 36 | gulp.task('webpack:build', (callback) => { 37 | // modify some webpack config options 38 | const myConfig = Object.create(webpackConfig); 39 | myConfig.output.publicPath = `${siteConfig.rootPath}/build/`; 40 | myConfig.plugins = myConfig.plugins.concat( 41 | new webpack.DefinePlugin({ 42 | 'process.env': { 43 | // This has effect on the react lib size 44 | NODE_ENV: JSON.stringify('production') 45 | } 46 | }), 47 | new webpack.optimize.UglifyJsPlugin(), 48 | // 压缩css代码 49 | new OptimizeCssAssetsPlugin({ 50 | cssProcessor: require('cssnano'), 51 | cssProcessorPluginOptions: { 52 | preset: ['default', { discardComments: { removeAll: true } }], 53 | }, 54 | }) 55 | ); 56 | 57 | // run webpack 58 | webpack(myConfig, (err, stats) => { 59 | if (err) throw new gutil.PluginError('webpack:build', err); 60 | gutil.log('[webpack:build]', stats.toString({ 61 | colors: true 62 | })); 63 | callback(); 64 | }); 65 | }); 66 | -------------------------------------------------------------------------------- /img/alibaba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/alibaba.png -------------------------------------------------------------------------------- /img/alibaba_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/alibaba_hover.png -------------------------------------------------------------------------------- /img/apache_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/apache_logo.png -------------------------------------------------------------------------------- /img/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/architecture.png -------------------------------------------------------------------------------- /img/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/arrow_down.png -------------------------------------------------------------------------------- /img/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/arrow_right.png -------------------------------------------------------------------------------- /img/blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog.png -------------------------------------------------------------------------------- /img/blog/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/.gitkeep -------------------------------------------------------------------------------- /img/blog/dubbo-go-1.4.0.resources/auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-1.4.0.resources/auth.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-1.4.0.resources/configcenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-1.4.0.resources/configcenter.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-1.4.0.resources/connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-1.4.0.resources/connect.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-1.4.0.resources/dubbo-go-k8s-registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-1.4.0.resources/dubbo-go-k8s-registry.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-1.4.0.resources/rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-1.4.0.resources/rest.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-k8s-registry.resources/dubbo-k8s-registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-k8s-registry.resources/dubbo-k8s-registry.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-k8s-registry.resources/dubbo-registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-k8s-registry.resources/dubbo-registry.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-k8s-registry.resources/k8s-discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-k8s-registry.resources/k8s-discovery.png -------------------------------------------------------------------------------- /img/blog/dubbo-go-rusted-call-implementation.resources/rusted-call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbo-go-rusted-call-implementation.resources/rusted-call.png -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/apollo-support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/apollo-support.png -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/configCenterFactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/configCenterFactory.png -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/configcenter-class.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/configcenter-class.jpg -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/configurationFactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/configurationFactory.png -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/design.jpg -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/dynamicConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/dynamicConfiguration.png -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/key-struct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/key-struct.jpg -------------------------------------------------------------------------------- /img/blog/dubbogo-configcenter.resources/zookeeper-usercase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-configcenter.resources/zookeeper-usercase.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/1.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/10.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/11.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/12.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/13.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/14.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/2.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/3.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/4.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/5.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/6.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/7.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/8.png -------------------------------------------------------------------------------- /img/blog/dubbogo-grpc/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-grpc/9.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/02D8682E-E9CB-413A-A870-0624FA9FF3DC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/02D8682E-E9CB-413A-A870-0624FA9FF3DC.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/0458EEEC-3D3A-48DD-AF6D-FBEECB12BAAB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/0458EEEC-3D3A-48DD-AF6D-FBEECB12BAAB.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/06C23FEB-1175-4515-979A-35BC1083EEA2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/06C23FEB-1175-4515-979A-35BC1083EEA2.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/18FB16F5-1DC6-4FE1-A3AD-7485B27D47A1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/18FB16F5-1DC6-4FE1-A3AD-7485B27D47A1.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/1ECF7DDE-6079-46FF-B6D5-F98EE8C61E1C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/1ECF7DDE-6079-46FF-B6D5-F98EE8C61E1C.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/29B3D035-5E7C-4255-AD3F-2AC708613E2E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/29B3D035-5E7C-4255-AD3F-2AC708613E2E.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/2DFF562A-FFE9-40FA-ACA1-79B4D8F885D8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/2DFF562A-FFE9-40FA-ACA1-79B4D8F885D8.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/5005C490-06DE-4591-AC0A-2CB7AF5B7B16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/5005C490-06DE-4591-AC0A-2CB7AF5B7B16.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/6E9950E9-2660-4320-85C9-AC37F3FC91A2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/6E9950E9-2660-4320-85C9-AC37F3FC91A2.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/6FA364EC-4F91-4AA9-BE04-6ACEEEDEE2ED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/6FA364EC-4F91-4AA9-BE04-6ACEEEDEE2ED.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/8714678C-DEF4-4689-AEA7-1277CA367820.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/8714678C-DEF4-4689-AEA7-1277CA367820.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/88BFAACF-DF73-43EE-A2A2-2B2B29E774DF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/88BFAACF-DF73-43EE-A2A2-2B2B29E774DF.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/A3407C69-FC94-468A-90AC-440671C8CED9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/A3407C69-FC94-468A-90AC-440671C8CED9.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/B93442AD-3367-4020-80B3-54D3FF26342C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/B93442AD-3367-4020-80B3-54D3FF26342C.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/C86E3808-33CC-4E8C-9C6C-76028DFD9F02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/C86E3808-33CC-4E8C-9C6C-76028DFD9F02.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/CA2B8545-71EA-4BC1-BD0F-2576E194641A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/CA2B8545-71EA-4BC1-BD0F-2576E194641A.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/D8B67CA9-A65A-4913-860D-AC491D6A92A8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/D8B67CA9-A65A-4913-860D-AC491D6A92A8.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/D97C3B91-9837-41E0-AAD4-D40FF0714033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/D97C3B91-9837-41E0-AAD4-D40FF0714033.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/E388EA3B-9C62-4202-9AAD-7C2D95FAD08A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/E388EA3B-9C62-4202-9AAD-7C2D95FAD08A.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/F2BB669C-E80F-4111-830B-A1550ECA05A4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/F2BB669C-E80F-4111-830B-A1550ECA05A4.png -------------------------------------------------------------------------------- /img/blog/dubbogo-metrics-design-implementation.resources/FDB62C61-4010-4731-9F71-214E9A822647.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-metrics-design-implementation.resources/FDB62C61-4010-4731-9F71-214E9A822647.png -------------------------------------------------------------------------------- /img/blog/dubbogo-sentinel.resources/dubbo-go-sentinel-provider-filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-sentinel.resources/dubbo-go-sentinel-provider-filter.png -------------------------------------------------------------------------------- /img/blog/dubbogo-sentinel.resources/sentinel-golang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-sentinel.resources/sentinel-golang.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/03F6405B-EC9E-4B6C-ADBC-B592C7D73993.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/03F6405B-EC9E-4B6C-ADBC-B592C7D73993.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/0828B17D-E360-411C-890E-D29A8AFDC0C3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/0828B17D-E360-411C-890E-D29A8AFDC0C3.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/16EC5FAF-9315-497A-9935-3D71D6396C1D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/16EC5FAF-9315-497A-9935-3D71D6396C1D.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/175110DC-4A63-4D62-ABC9-60B0B2583332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/175110DC-4A63-4D62-ABC9-60B0B2583332.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/1C41456B-F16A-47A2-8840-062ACB0C3A96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/1C41456B-F16A-47A2-8840-062ACB0C3A96.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/1EAB168B-3593-406B-ACDD-7EDCD83780A4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/1EAB168B-3593-406B-ACDD-7EDCD83780A4.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/3DDA7F0A-6B09-4688-BFF3-BB07B4322B83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/3DDA7F0A-6B09-4688-BFF3-BB07B4322B83.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/6A9A771E-C9FF-45E0-88AE-2F9E310E9F6C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/6A9A771E-C9FF-45E0-88AE-2F9E310E9F6C.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/9110D139-2D32-41E7-BD12-D114AD52CB19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/9110D139-2D32-41E7-BD12-D114AD52CB19.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/AB4AE556-6447-4C85-9DAB-8C1A291C1750.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/AB4AE556-6447-4C85-9DAB-8C1A291C1750.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/AD66F1F8-44DC-4331-BA66-50400040B426.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/AD66F1F8-44DC-4331-BA66-50400040B426.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/C45FA9ED-EBB8-4A7C-ACBC-1CB1F4938CDE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/C45FA9ED-EBB8-4A7C-ACBC-1CB1F4938CDE.png -------------------------------------------------------------------------------- /img/blog/dubbogo-tps-limit-design-implementation.resources/ED904B92-2DE3-4FB8-86B1-4004952285DA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/dubbogo-tps-limit-design-implementation.resources/ED904B92-2DE3-4FB8-86B1-4004952285DA.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/02181BEF-03D7-4987-BC39-9831C07944BD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/02181BEF-03D7-4987-BC39-9831C07944BD.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/0B9BD927-0DCF-4439-8800-B725D219DD64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/0B9BD927-0DCF-4439-8800-B725D219DD64.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/0BB9995C-4E20-444D-BAC8-525F9A13C0C4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/0BB9995C-4E20-444D-BAC8-525F9A13C0C4.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/1788C3AD-30A8-48BD-986E-1BA169EBD712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/1788C3AD-30A8-48BD-986E-1BA169EBD712.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/2135B11B-7FF7-4EB2-BEB5-4516FD8003BF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/2135B11B-7FF7-4EB2-BEB5-4516FD8003BF.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/2801B5B0-D743-48E5-AA9C-02BFD7E7A2E1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/2801B5B0-D743-48E5-AA9C-02BFD7E7A2E1.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/3FBBA4BA-639F-4915-BF91-E5B87E2548CC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/3FBBA4BA-639F-4915-BF91-E5B87E2548CC.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/41CD44F6-278A-4298-8E65-AF075B40DD09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/41CD44F6-278A-4298-8E65-AF075B40DD09.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/4969FC2A-29E1-4AF2-8F55-FA078AD8AD2B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/4969FC2A-29E1-4AF2-8F55-FA078AD8AD2B.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/520B03F6-01F6-4A55-B92B-D78DE8CE29E3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/520B03F6-01F6-4A55-B92B-D78DE8CE29E3.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/58B1A48E-358F-45A0-9210-1BD06647EB6F.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/58B1A48E-358F-45A0-9210-1BD06647EB6F.jpg -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/82381102-B9A2-48B4-92AD-03B5601E4E7F.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/82381102-B9A2-48B4-92AD-03B5601E4E7F.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/855E8ED8-0447-4A95-B0CC-8D67FAFF980D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/855E8ED8-0447-4A95-B0CC-8D67FAFF980D.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/8D32BFA6-4C61-466B-A877-3F278529557C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/8D32BFA6-4C61-466B-A877-3F278529557C.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/95858C87-82F5-40EA-A705-8074A0125DCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/95858C87-82F5-40EA-A705-8074A0125DCC.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/984096FE-8A3D-4455-9C52-10D4BCE76D6D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/984096FE-8A3D-4455-9C52-10D4BCE76D6D.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/ACF8EC2D-6CF4-4117-B38C-3A3164166ED5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/ACF8EC2D-6CF4-4117-B38C-3A3164166ED5.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/BFC7D79A-E97B-41D5-B622-698E4D90D25C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/BFC7D79A-E97B-41D5-B622-698E4D90D25C.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/C51595FC-BD64-49D2-8B13-253CD72BD2F1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/C51595FC-BD64-49D2-8B13-253CD72BD2F1.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/D48DE29E-042A-46D7-B699-90D0D5CE6EB9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/D48DE29E-042A-46D7-B699-90D0D5CE6EB9.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/DA86E6E3-9A89-4352-AEB2-9B1730739F93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/DA86E6E3-9A89-4352-AEB2-9B1730739F93.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/DE9BB73F-D08E-44BC-A186-87A14B88FEBF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/DE9BB73F-D08E-44BC-A186-87A14B88FEBF.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/F015A2D2-4FE9-493A-A58E-3C6795B5EC7C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/F015A2D2-4FE9-493A-A58E-3C6795B5EC7C.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/F04254AA-EDF9-4677-81FE-3952910BDF36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/F04254AA-EDF9-4677-81FE-3952910BDF36.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/F895B55D-CDF6-433C-9CD0-9F79A659727B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/F895B55D-CDF6-433C-9CD0-9F79A659727B.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/F94B1BF6-C09E-41EB-A7E9-636915CC539E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/F94B1BF6-C09E-41EB-A7E9-636915CC539E.png -------------------------------------------------------------------------------- /img/blog/graceful-shutdown.resources/gaitubao_C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/blog/graceful-shutdown.resources/gaitubao_C81D8722-BD05-49D5-9795-7CF97F4B1DE1.png -------------------------------------------------------------------------------- /img/community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/community.png -------------------------------------------------------------------------------- /img/dingding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dingding.png -------------------------------------------------------------------------------- /img/doc/dubbo-go-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/doc/dubbo-go-arch.png -------------------------------------------------------------------------------- /img/doc/dubbo-go-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/doc/dubbo-go-ext.png -------------------------------------------------------------------------------- /img/docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/docs.png -------------------------------------------------------------------------------- /img/docs_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/docs_hover.png -------------------------------------------------------------------------------- /img/docs_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/docs_normal.png -------------------------------------------------------------------------------- /img/documents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/documents.png -------------------------------------------------------------------------------- /img/dubbo-go-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo-go-architecture.png -------------------------------------------------------------------------------- /img/dubbo-go-client.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo-go-client.png -------------------------------------------------------------------------------- /img/dubbo-go-group.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo-go-group.jpg -------------------------------------------------------------------------------- /img/dubbo-go-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo-go-server.png -------------------------------------------------------------------------------- /img/dubbo-go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo-go.png -------------------------------------------------------------------------------- /img/dubbo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo.ico -------------------------------------------------------------------------------- /img/dubbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo.png -------------------------------------------------------------------------------- /img/dubbo_colorful.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo_colorful.png -------------------------------------------------------------------------------- /img/dubbo_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo_gray.png -------------------------------------------------------------------------------- /img/dubbo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/dubbo_white.png -------------------------------------------------------------------------------- /img/feature_hogh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_hogh.png -------------------------------------------------------------------------------- /img/feature_loadbalances.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_loadbalances.png -------------------------------------------------------------------------------- /img/feature_maintenance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_maintenance.png -------------------------------------------------------------------------------- /img/feature_runtime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_runtime.png -------------------------------------------------------------------------------- /img/feature_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_service.png -------------------------------------------------------------------------------- /img/feature_transpart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/feature_transpart.png -------------------------------------------------------------------------------- /img/incubating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/incubating.png -------------------------------------------------------------------------------- /img/issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/issue.png -------------------------------------------------------------------------------- /img/mailinglist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/mailinglist.png -------------------------------------------------------------------------------- /img/mailinglist_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/mailinglist_hover.png -------------------------------------------------------------------------------- /img/manage_profiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/manage_profiles.png -------------------------------------------------------------------------------- /img/menu_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/menu_gray.png -------------------------------------------------------------------------------- /img/menu_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/menu_white.png -------------------------------------------------------------------------------- /img/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/next.png -------------------------------------------------------------------------------- /img/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/prev.png -------------------------------------------------------------------------------- /img/pullrequest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/pullrequest.png -------------------------------------------------------------------------------- /img/quick_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/quick_start.png -------------------------------------------------------------------------------- /img/so-icon-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/so-icon-hover.png -------------------------------------------------------------------------------- /img/so-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/so-icon.png -------------------------------------------------------------------------------- /img/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/twitter.png -------------------------------------------------------------------------------- /img/twitter_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/twitter_hover.png -------------------------------------------------------------------------------- /img/user_chuangjinzhitou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/user_chuangjinzhitou.png -------------------------------------------------------------------------------- /img/users_alibaba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/users_alibaba.png -------------------------------------------------------------------------------- /img/users_ctrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/users_ctrip.png -------------------------------------------------------------------------------- /img/users_haozhuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/users_haozhuo.png -------------------------------------------------------------------------------- /img/users_tuya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/users_tuya.png -------------------------------------------------------------------------------- /img/zk-configcenter-governance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/zk-configcenter-governance.jpg -------------------------------------------------------------------------------- /img/zk-configcenter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/img/zk-configcenter.jpg -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dubbo-site", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./node_modules/.bin/docsite start", 7 | "build": "node ./node_modules/.bin/docsite build" 8 | }, 9 | "devDependencies": { 10 | "babel-core": "6.23.1", 11 | "babel-eslint": "^6.0.5", 12 | "babel-loader": "6.4.0", 13 | "babel-plugin-transform-class-properties": "^6.24.1", 14 | "babel-plugin-transform-decorators-legacy": "^1.3.4", 15 | "babel-plugin-transform-object-assign": "^6.22.0", 16 | "babel-plugin-transform-object-rest-spread": "^6.23.0", 17 | "babel-plugin-transform-runtime": "^6.23.0", 18 | "babel-preset-es2015": "6.22.0", 19 | "babel-preset-react": "6.23.0", 20 | "babel-preset-stage-0": "6.22.0", 21 | "babel-register": "^6.26.0", 22 | "css-loader": "0.6.12", 23 | "cssnano": "^4.1.10", 24 | "eslint": "^3.6.0", 25 | "eslint-config-ali": "^1.0.0", 26 | "eslint-plugin-import": "*", 27 | "eslint-plugin-react": "*", 28 | "extract-text-webpack-plugin": "^2.1.2", 29 | "file-loader": "^3.0.1", 30 | "gulp": "3.9.1", 31 | "gulp-util": "2.2.20", 32 | "json-loader": "*", 33 | "node-libs-browser": "2.0.0", 34 | "node-sass": "^4.7.2", 35 | "opn": "^5.3.0", 36 | "optimize-css-assets-webpack-plugin": "^3.2.0", 37 | "raw-loader": "^0.5.1", 38 | "resolve-url-loader": "^3.0.1", 39 | "sass-loader": "6.0.2", 40 | "style-loader": "0.6.5", 41 | "webpack": "^2.6.1", 42 | "webpack-dev-server": "^2.4.5", 43 | "docsite": "^1.3.9" 44 | }, 45 | "dependencies": { 46 | "classnames": "^2.2.5", 47 | "core-decorators": "^0.20.0", 48 | "js-cookie": "^2.2.0", 49 | "react": "^15.4.2", 50 | "react-dom": "^15.4.2", 51 | "react-scroll": "^1.7.9", 52 | "react-tilt": "^0.1.4", 53 | "whatwg-fetch": "^2.0.4" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /redirect.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Apache Dubbo is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. 11 | 12 | 20 |

Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.

21 | Security 22 | 23 | 24 | 33 | 34 | -------------------------------------------------------------------------------- /resource/2017-于雨-dubbogo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/2017-于雨-dubbogo.pdf -------------------------------------------------------------------------------- /resource/API.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/API.png -------------------------------------------------------------------------------- /resource/DUBBO-GO@2019.08.17上海02.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/DUBBO-GO@2019.08.17上海02.pptx -------------------------------------------------------------------------------- /resource/Invoker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/Invoker.png -------------------------------------------------------------------------------- /resource/cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/cluster.png -------------------------------------------------------------------------------- /resource/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/config.png -------------------------------------------------------------------------------- /resource/dubbo-go-arch.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/dubbo-go-arch.pptx -------------------------------------------------------------------------------- /resource/dubbogo20191224-shanghai-gopher.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/dubbogo20191224-shanghai-gopher.pptx -------------------------------------------------------------------------------- /resource/dubbogo20191228-hangzhou-gopher-邓明.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/dubbogo20191228-hangzhou-gopher-邓明.pptx -------------------------------------------------------------------------------- /resource/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/filter.png -------------------------------------------------------------------------------- /resource/load_balancers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/load_balancers.png -------------------------------------------------------------------------------- /resource/metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/metadata.png -------------------------------------------------------------------------------- /resource/monitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/monitor.png -------------------------------------------------------------------------------- /resource/panty_dubbo-go_share.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/panty_dubbo-go_share.pptx -------------------------------------------------------------------------------- /resource/protocol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/protocol.png -------------------------------------------------------------------------------- /resource/proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/proxy.png -------------------------------------------------------------------------------- /resource/registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/registry.png -------------------------------------------------------------------------------- /resource/router.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/resource/router.png -------------------------------------------------------------------------------- /site_config/home.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default { 4 | 'zh-cn': { 5 | brand: { 6 | brandName: 'Apache Dubbo-go', 7 | briefIntroduction: '一款兼容 Apache Dubbo™ 的高性能 Go RPC 框架。', 8 | getStartedButton: { 9 | text: '快速开始', 10 | link: '/zh-cn/docs/user/quick-start.html', 11 | }, 12 | viewOnGithubButton: { 13 | text: 'GITHUB', 14 | link: 'https://github.com/apache/dubbo-go', 15 | } 16 | }, 17 | introduction: { 18 | title: '高性能 Go RPC 框架', 19 | desc: '提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。', 20 | img: '/img/architecture.png', 21 | }, 22 | // features: { 23 | // title: '特性一览', 24 | // list: [ 25 | // { 26 | // img: '', 27 | // title: '', 28 | // content: '', 29 | // } 30 | // ], 31 | // }, 32 | start: { 33 | title: '快速开始', 34 | desc: '只需通过几行代码即可快速构建一个 Dubbo-go 应用。', 35 | img: '/img/quick_start.png', 36 | button: { 37 | text: '阅读更多', 38 | link: '/zh-cn/docs/user/quick-start.html', 39 | }, 40 | }, 41 | // blogs: { 42 | // title: '推荐文章', 43 | // list: [ 44 | // { 45 | // url: '/zh-cn/blog/dubbo-go-practice-exploration.html', 46 | // display: '涂鸦智能 dubbo-go 亿级流量的实践与探索' 47 | // }, 48 | // { 49 | // url: '/zh-cn/blog/dubbo-go-one-year.html', 50 | // display: 'Go 版本入 Dubbo 生态一周年:已和 Spring Cloud、gRPC 互通' 51 | // }, 52 | // { 53 | // url: '/zh-cn/blog/dubbo-go-k8s-registry.html', 54 | // display: 'dubbo-go 中将 Kubernets 原⽣作为注册中⼼的设计和实现' 55 | // } 56 | // ] 57 | // }, 58 | users: { 59 | title: '谁在使用 Dubbo-go', 60 | desc: 请在 Dubbo-go 用户列表 上提供信息来帮助 Dubbo 做的更好。, 61 | list: [ 62 | '/img/users_ctrip.png', 63 | '/img/users_haozhuo.png', 64 | '/img/users_tuya.png' 65 | ], 66 | }, 67 | }, 68 | 'en-us': { 69 | brand: { 70 | brandName: 'Apache Dubbo-go', 71 | briefIntroduction: 'A high-performance, Compatible Apache Dubbo™, Go based open source RPC framework.', 72 | getStartedButton: { 73 | text: 'GET STARTED', 74 | link: '/en-us/docs/user/quick-start.html', 75 | }, 76 | viewOnGithubButton: { 77 | text: 'GITHUB', 78 | link: 'https://github.com/apache/dubbo-go', 79 | } 80 | }, 81 | introduction: { 82 | title: 'A high performance Go RPC framework', 83 | desc: 'Offers three key functionalities, which include interface based remote call, fault tolerance & load balancing, and automatic service registration & discovery.', 84 | img: '/img/architecture.png', 85 | }, 86 | // features: { 87 | // title: 'Feature List', 88 | // list: [ 89 | // { 90 | // img: '', 91 | // title: '', 92 | // content: '', 93 | // } 94 | // ] 95 | // }, 96 | start: { 97 | title: 'Quick start', 98 | desc: 'This guide gets you started with dubbo-go in Go with a simple working example.', 99 | img: '/img/quick_start.png', 100 | button: { 101 | text: 'READ MORE', 102 | link: '/en-us/docs/user/quick-start.html', 103 | }, 104 | }, 105 | // blogs: { 106 | // title: '推荐文章', 107 | // list: [ 108 | // { 109 | // url: '/zh-cn/blog/dubbo-go-practice-exploration.html', 110 | // display: '涂鸦智能 dubbo-go 亿级流量的实践与探索' 111 | // }, 112 | // { 113 | // url: '/zh-cn/blog/dubbo-go-one-year.html', 114 | // display: 'Go 版本入 Dubbo 生态一周年:已和 Spring Cloud、gRPC 互通' 115 | // }, 116 | // { 117 | // url: '/zh-cn/blog/dubbo-go-k8s-registry.html', 118 | // display: 'dubbo-go 中将 Kubernets 原⽣作为注册中⼼的设计和实现' 119 | // } 120 | // ] 121 | // }, 122 | users: { 123 | title: 'Who is using Dubbo-go', 124 | desc: Providing your info on dubbo-go user list to help improving dubbo better, 125 | list: [ 126 | '/img/users_ctrip.png', 127 | '/img/users_haozhuo.png', 128 | '/img/users_tuya.png' 129 | ], 130 | }, 131 | }, 132 | }; 133 | -------------------------------------------------------------------------------- /sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/bar/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import classnames from 'classnames'; 4 | import './index.scss'; 5 | 6 | const propTypes = { 7 | text: PropTypes.string.isRequired, // 显示的文案 8 | img: PropTypes.string.isRequired, // 显示的图片链接 9 | }; 10 | 11 | const Bar = (props) => { 12 | const { text, img } = props; 13 | const cls = classnames({ 14 | bar: true, 15 | }); 16 | return ( 17 |
18 |
19 | 20 | {text} 21 | 22 |
23 |
24 | ); 25 | }; 26 | 27 | Bar.propTypes = propTypes; 28 | 29 | export default Bar; 30 | -------------------------------------------------------------------------------- /src/components/bar/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | 3 | .bar { 4 | margin-top: $headerHeight; 5 | background-image: linear-gradient(-90deg, $startColor 0%, $intermediateColor 51%, $endColor 100%); 6 | .bar-body { 7 | max-width: $contentWidth; 8 | margin: 0 auto; 9 | height: $barHeight; 10 | line-height: $barHeight; 11 | font-family: Avenir-Heavy; 12 | font-size: 36px; 13 | color: #FFF; 14 | position: relative; 15 | &::before { 16 | content: ''; 17 | height: 100%; 18 | position: absolute; 19 | left: 42px; 20 | top: 0; 21 | opacity: 0.3; 22 | border-left: 1px solid #FFFFFF; 23 | } 24 | &::after { 25 | content: ''; 26 | height: 16px; 27 | position: absolute; 28 | left: 40px; 29 | top: 50%; 30 | margin: auto 0; 31 | border-left: 4px solid #FFFFFF; 32 | } 33 | .front-img { 34 | width: 80px; 35 | height: 80px; 36 | vertical-align: middle; 37 | margin: 0 28px 0 70px; 38 | } 39 | .back-img { 40 | width: 160px; 41 | height: 160px; 42 | position: absolute; 43 | right: 168px; 44 | bottom: 0; 45 | opacity: 0.15; 46 | } 47 | @media screen and (max-width: $mobileWidth){ 48 | &::before { 49 | left: 22px; 50 | } 51 | &::after { 52 | left: 20px; 53 | } 54 | .front-img { 55 | margin-left: 50px; 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /src/components/button/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import classnames from 'classnames'; 3 | import { getLink } from '../../../utils'; 4 | import './index.scss'; 5 | 6 | const Button = (props) => { 7 | return ( 8 | 18 | {props.children} 19 | 20 | ); 21 | }; 22 | 23 | export default Button; 24 | -------------------------------------------------------------------------------- /src/components/button/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | .button { 3 | box-sizing: border-box; 4 | display: inline-block; 5 | height: 48px; 6 | line-height: 48px; 7 | min-width: 140px; 8 | padding: 0 12px; 9 | font-family: Avenir-Heavy; 10 | font-size: 16px; 11 | color: #FFF; 12 | text-align: center; 13 | border-radius: 4px; 14 | text-decoration: none; 15 | &-primary { 16 | color: $brandColor; 17 | background: #fff; 18 | } 19 | &-normal { 20 | background: transparent; 21 | border: 1px solid #fff; 22 | } 23 | } -------------------------------------------------------------------------------- /src/components/footer/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import cookie from 'js-cookie'; 4 | import siteConfig from '../../../site_config/site'; 5 | import { getLink } from '../../../utils'; 6 | import './index.scss'; 7 | 8 | const propTypes = { 9 | logo: PropTypes.string.isRequired, // logo地址 10 | }; 11 | 12 | class Footer extends React.Component { 13 | 14 | render() { 15 | const { logo } = this.props; 16 | const language = cookie.get('docsite_language') || siteConfig.defaultLanguage; 17 | const dataSource = siteConfig[language]; 18 | return ( 19 | 62 | ); 63 | } 64 | } 65 | 66 | Footer.propTypes = propTypes; 67 | 68 | export default Footer; 69 | -------------------------------------------------------------------------------- /src/components/footer/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | 3 | .footer-container { 4 | background: #F8F8F8; 5 | .footer-body { 6 | max-width: $contentWidth; 7 | margin: 0 auto; 8 | box-sizing: border-box; 9 | padding: 40px 40px 0; 10 | @media screen and (max-width: $mobileWidth) { 11 | padding-left: 20px; 12 | padding-right: 20px; 13 | } 14 | img { 15 | // display: block; 16 | width: 125px; 17 | height: 26px; 18 | margin-bottom: 28px; 19 | margin-right: 20px; 20 | vertical-align: middle; 21 | } 22 | .apache { 23 | width: 50px; 24 | height: 50px; 25 | } 26 | .cols-container { 27 | margin-bottom: 60px; 28 | .col { 29 | display: inline-block; 30 | box-sizing: border-box; 31 | vertical-align: top; 32 | } 33 | .col-12 { 34 | width: 50%; 35 | padding-right: 125px; 36 | } 37 | .col-6 { 38 | width: 25%; 39 | } 40 | .col-4 { 41 | width: 16.666667%; 42 | } 43 | h3 { 44 | font-family: Avenir-Heavy; 45 | font-size: 18px; 46 | color: #333; 47 | line-height: 18px; 48 | margin-bottom: 20px; 49 | } 50 | p { 51 | font-family: Avenir-Medium; 52 | font-size: 12px; 53 | color: #999; 54 | line-height: 18px; 55 | } 56 | dl { 57 | font-family: Avenir-Heavy; 58 | line-height: 18px; 59 | } 60 | dt { 61 | font-weight: bold; 62 | font-size: 18px; 63 | color: #333; 64 | margin-bottom: 20px; 65 | } 66 | dd { 67 | padding: 0; 68 | margin: 0; 69 | a { 70 | text-decoration: none; 71 | display: block; 72 | font-size: 14px; 73 | color: #999; 74 | margin: 10px 0; 75 | } 76 | a:hover { 77 | color: $brandColor; 78 | } 79 | } 80 | } 81 | .copyright { 82 | border-top: 1px solid #ccc; 83 | min-height: 60px; 84 | line-height: 20px; 85 | text-align: center; 86 | font-family: Avenir-Medium; 87 | font-size: 12px; 88 | color: #999; 89 | display: flex; 90 | align-items: center; 91 | span { 92 | display: inline-block; 93 | margin: 0 auto; 94 | } 95 | } 96 | } 97 | } 98 | 99 | @media screen and (max-width: $mobileWidth) { 100 | .footer-container { 101 | .footer-body { 102 | .cols-container { 103 | .col { 104 | width: 100%; 105 | text-align: center; 106 | padding: 0; 107 | } 108 | } 109 | } 110 | } 111 | } -------------------------------------------------------------------------------- /src/components/language/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { autobind } from 'core-decorators'; 3 | import cookie from 'js-cookie'; 4 | 5 | export default class Language extends React.Component { 6 | @autobind 7 | onLanguageChange(language) { 8 | const pathname = window.location.pathname; 9 | let oldLang; 10 | if (language === 'zh-cn') { 11 | oldLang = 'en-us'; 12 | } else { 13 | oldLang = 'zh-cn'; 14 | } 15 | const newPathname = pathname.replace(`${window.rootPath}/${oldLang}`, `${window.rootPath}/${language}`); 16 | cookie.set('docsite_language', language, { expires: 365, path: '' }); 17 | window.location = newPathname; 18 | } 19 | 20 | getLanguage() { 21 | let urlLang; 22 | if (window.rootPath) { 23 | urlLang = window.location.pathname.split('/')[2]; 24 | } else { 25 | urlLang = window.location.pathname.split('/')[1]; 26 | } 27 | let language = this.props.lang || urlLang || cookie.get('docsite_language') || siteConfig.defaultLanguage; 28 | // 防止链接被更改导致错误的cookie存储 29 | if (language !== 'en-us' && language !== 'zh-cn') { 30 | language = siteConfig.defaultLanguage; 31 | } 32 | // 同步cookie语言版本 33 | if (language !== cookie.get('docsite_language')) { 34 | cookie.set('docsite_language', language, { expires: 365, path: '' }); 35 | } 36 | return language; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/pageSlider/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { autobind } from 'core-decorators'; 4 | import classnames from 'classnames'; 5 | import { throttle } from '../../../utils'; 6 | 7 | import './index.scss'; 8 | 9 | const propTypes = { 10 | pageSize: PropTypes.number, // 每页最多显示的条数 11 | 12 | }; 13 | const defaultProps = { 14 | pageSize: 5, 15 | }; 16 | 17 | @autobind 18 | class pageSlider extends React.Component { 19 | constructor(props) { 20 | super(props); 21 | this.container = null; 22 | this.state = { 23 | page: 0, 24 | pageWidth: 0, 25 | }; 26 | } 27 | 28 | componentDidMount() { 29 | const pageWidth = this.container.getBoundingClientRect().width; 30 | /* eslint-disable react/no-did-mount-set-state */ 31 | this.setState({ 32 | pageWidth, 33 | }); 34 | this.throttleAdjust = throttle(() => { 35 | this.setState({ 36 | pageWidth: this.container.getBoundingClientRect().width, 37 | }); 38 | }, 200); 39 | window.addEventListener('resize', this.throttleAdjust); 40 | } 41 | 42 | componentWillUnmount() { 43 | window.removeEventListener('resize', this.throttleAdjust); 44 | } 45 | 46 | changePage(i) { 47 | this.setState({ 48 | page: i, 49 | }); 50 | } 51 | 52 | renderSliderList() { 53 | const { children, pageSize } = this.props; 54 | const { page, pageWidth } = this.state; 55 | const splitGroup = []; 56 | const len = React.Children.count(children); 57 | // 分成的屏数 58 | const splitNum = Math.ceil(len / pageSize); 59 | /* eslint-disable no-plusplus*/ 60 | for (let i = 0; i < splitNum; i++) { 61 | splitGroup.push(Array.from(children).slice(i * pageSize, (i + 1) * pageSize)); 62 | } 63 | return ( 64 |
72 | {splitGroup.map((group, i) => { 73 | return ( 74 |
79 | { 80 | group.map((child, j) => ( 81 |
85 | {child} 86 |
87 | ) 88 | ) 89 | } 90 |
91 | ); 92 | })} 93 |
94 | ); 95 | } 96 | 97 | @autobind 98 | renderControl() { 99 | const { children, pageSize } = this.props; 100 | const { page } = this.state; 101 | const len = React.Children.count(children); 102 | // 分成的屏数 103 | const splitNum = Math.ceil(len / pageSize); 104 | return ( 105 |
106 | 116 | 126 |
127 | ); 128 | } 129 | 130 | render() { 131 | return ( 132 |
{ this.container = node; }}> 133 | {this.renderSliderList()} 134 | {this.renderControl()} 135 |
136 | ); 137 | } 138 | } 139 | 140 | pageSlider.propTypes = propTypes; 141 | pageSlider.defaultProps = defaultProps; 142 | 143 | export default pageSlider; 144 | -------------------------------------------------------------------------------- /src/components/pageSlider/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | 3 | .page-slider { 4 | overflow: hidden; 5 | .slider-list { 6 | overflow: visible; 7 | .slider-page { 8 | overflow: hidden; 9 | display: inline-block; 10 | vertical-align: top; 11 | } 12 | } 13 | .slider-control { 14 | overflow: hidden; 15 | img { 16 | display: inline-block; 17 | width: 52px; 18 | height: 52px; 19 | cursor: pointer; 20 | } 21 | .slider-control-prev { 22 | float: left; 23 | &-hidden { 24 | display: none; 25 | } 26 | } 27 | .slider-control-next { 28 | float: right; 29 | &-hidden { 30 | display: none; 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/components/sidemenu/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import classnames from 'classnames'; 3 | import { autobind } from 'core-decorators'; 4 | import Item from './item.jsx'; 5 | import './index.scss'; 6 | 7 | export default class SideMenu extends React.Component { 8 | constructor(props) { 9 | super(props); 10 | this.state = { 11 | menuBodyVisible: false, 12 | }; 13 | } 14 | 15 | @autobind 16 | toggleMenuBody() { 17 | this.setState({ 18 | menuBodyVisible: !this.state.menuBodyVisible, 19 | }); 20 | } 21 | 22 | render() { 23 | const { dataSource } = this.props; 24 | const { menuBodyVisible } = this.state; 25 | const cls = classnames({ 26 | sidemenu: true, 27 | 'sidemenu-open': menuBodyVisible, 28 | }); 29 | const itemCls = classnames({ 30 | 'menu-item': true, 31 | 'menu-item-level-1': true, 32 | }); 33 | return ( 34 |
35 |
36 | 37 |
38 | 59 |
60 | ); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/components/sidemenu/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | .sidemenu { 3 | background: $sideMenuBgColor; 4 | width: $sideMenuWidth; 5 | position: relative; 6 | display: inline-block; 7 | padding: 20px 0; 8 | .sidemenu-toggle { 9 | text-align: center; 10 | cursor: pointer; 11 | position: absolute; 12 | top: 0; 13 | width: 40px; 14 | right: -40px; 15 | height: 30px; 16 | line-height: 30px; 17 | background: $sideMenuBgColor; 18 | border-radius: 0 4px 4px 0; 19 | display: none; 20 | img { 21 | width: 16px; 22 | text-align: center; 23 | vertical-align: middle; 24 | } 25 | } 26 | ul { 27 | list-style: none; 28 | padding: 0; 29 | margin: 0; 30 | } 31 | li { 32 | line-height: 0; 33 | } 34 | span, a { 35 | box-sizing: border-box; 36 | display: inline-block; 37 | position: relative; 38 | width: 100%; 39 | overflow-x: hidden; 40 | text-overflow: ellipsis; 41 | white-space: nowrap; 42 | } 43 | .menu-item-selected { 44 | a { 45 | background: white; 46 | } 47 | a::before { 48 | content: ''; 49 | position: absolute; 50 | left: 0; 51 | top: 0; 52 | width: 4px; 53 | height: 100%; 54 | background-image:linear-gradient(0deg, $startColor 0%, $intermediateColor 51%, $endColor 100%); 55 | } 56 | } 57 | .menu-item-level-1 { 58 | & > span { 59 | font-family: Avenir-Heavy; 60 | font-size: 18px; 61 | color: #333; 62 | padding-left: 20px; 63 | height: 40px; 64 | line-height: 40px; 65 | } 66 | } 67 | 68 | .menu-item-level-2, .menu-item-level-3 { 69 | cursor: pointer; 70 | & > span, & > a { 71 | font-family: Avenir-Medium; 72 | font-size: 14px; 73 | color: #666; 74 | &:hover { 75 | background: white; 76 | &::before { 77 | content: ''; 78 | position: absolute; 79 | left: 0; 80 | top: 0; 81 | width: 4px; 82 | height: 100%; 83 | background-image:linear-gradient(0deg, $startColor 0%, $intermediateColor 51%, $endColor 100%); 84 | } 85 | } 86 | } 87 | } 88 | 89 | .menu-item-level-2 { 90 | & > span, & > a { 91 | padding-left: 40px; 92 | height: 36px; 93 | line-height: 36px; 94 | img.menu-toggle { 95 | float: right; 96 | width: 13px; 97 | height: 8px; 98 | margin: 14px 20px 14px 0; 99 | } 100 | } 101 | } 102 | .menu-item-level-3 { 103 | & > a { 104 | padding-left: 60px; 105 | height: 36px; 106 | line-height: 36px; 107 | } 108 | } 109 | } 110 | 111 | @media screen and (max-width: $mobileWidth) { 112 | .sidemenu { 113 | width: 0; 114 | .sidemenu-toggle { 115 | display: inline-block; 116 | } 117 | &.sidemenu-open { 118 | width: $sideMenuWidth; 119 | } 120 | } 121 | } -------------------------------------------------------------------------------- /src/components/sidemenu/item.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { autobind } from 'core-decorators'; 3 | import classnames from 'classnames'; 4 | import { getLink } from '../../../utils'; 5 | 6 | export default class Item extends React.Component { 7 | constructor(props) { 8 | super(props); 9 | const { item } = props; 10 | const hasChildren = item.children && item.children.length; 11 | let opened = props.item.opened; 12 | if (hasChildren) { 13 | if (opened === undefined) { 14 | // 未配置展开,则是否展开由是否选中决定 15 | opened = item.children.find(child => `${window.rootPath}${child.link}` === window.location.pathname); 16 | } 17 | } else { 18 | opened = false; 19 | } 20 | this.state = { 21 | opened, 22 | }; 23 | } 24 | 25 | @autobind 26 | onItemClick(e) { 27 | this.props.toggleMenuBody(); 28 | e.stopPropagation(); 29 | } 30 | 31 | @autobind 32 | toggle() { 33 | this.setState({ 34 | opened: !this.state.opened, 35 | }); 36 | } 37 | 38 | @autobind 39 | renderSubMenu(data) { 40 | return ( 41 | 58 | ); 59 | } 60 | 61 | render() { 62 | const { item } = this.props; 63 | const hasChildren = item.children && item.children.length; 64 | const { opened } = this.state; 65 | const cls = classnames({ 66 | 'menu-item': true, 67 | 'menu-item-level-2': true, 68 | 'menu-item-selected': `${window.rootPath}${item.link}` === window.location.pathname, 69 | }); 70 | const style = { 71 | height: opened ? 36 * (item.children.length + 1) : 36, 72 | overflow: 'hidden', 73 | }; 74 | if (hasChildren) { 75 | return ( 76 |
  • 77 | { 78 | 79 | {item.title} 80 | 81 | 82 | } 83 | {this.renderSubMenu(item.children)} 84 |
  • 85 | ); 86 | } 87 | return ( 88 |
  • 89 | {item.title} 90 |
  • 91 | ); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/components/slider/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | 3 | .slider { 4 | overflow: hidden; 5 | .slider-list { 6 | overflow: visible; 7 | .slider-screen { 8 | display: inline-flex; 9 | justify-content: space-around; 10 | overflow: hidden; 11 | } 12 | } 13 | .slider-control { 14 | text-align: center; 15 | margin-top: 20px; 16 | .slider-control-item { 17 | cursor: pointer; 18 | display: inline-block; 19 | width: 20px; 20 | height: 4px; 21 | margin-right: 4px; 22 | background: #ccc; 23 | &-active { 24 | width: 40px; 25 | height: 6px; 26 | background-image: linear-gradient(-90deg, $startColor 0%, $intermediateColor 51%, $endColor 100%); 27 | } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /src/fonts/TXD_D-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Medium.eot -------------------------------------------------------------------------------- /src/fonts/TXD_D-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Medium.ttf -------------------------------------------------------------------------------- /src/fonts/TXD_D-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Medium.woff -------------------------------------------------------------------------------- /src/fonts/TXD_D-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Regular.eot -------------------------------------------------------------------------------- /src/fonts/TXD_D-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Regular.ttf -------------------------------------------------------------------------------- /src/fonts/TXD_D-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dubbogo/dubbo-go-website/d0c9e4209c3bd3f85005d1b2676e1aa145a7d96d/src/fonts/TXD_D-Regular.woff -------------------------------------------------------------------------------- /src/pages/blog/blogItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { autobind } from 'core-decorators'; 3 | import { getLink } from '../../../utils'; 4 | 5 | import './blogItem.scss'; 6 | 7 | @autobind 8 | class BlogItem extends React.Component { 9 | constructor(props) { 10 | super(props); 11 | this.state = { 12 | isHovered: false, 13 | }; 14 | } 15 | 16 | onMouseOver() { 17 | this.setState({ 18 | isHovered: true, 19 | }); 20 | } 21 | 22 | onMouseOut() { 23 | this.setState({ 24 | isHovered: false, 25 | }); 26 | } 27 | 28 | render() { 29 | const { dataSource } = this.props; 30 | const { link, target, title, author, companyIcon, companyIconHover, dateStr, desc } = dataSource; 31 | const { isHovered } = this.state; 32 | return ( 33 | 40 |
    41 | 42 | {title} 43 |
    44 |
    45 | {author} 46 | { 47 | companyIcon ? : null 48 | } 49 | {dateStr} 50 |
    51 |

    {desc}

    52 |
    53 | ); 54 | } 55 | } 56 | 57 | export default BlogItem; 58 | -------------------------------------------------------------------------------- /src/pages/blog/blogItem.scss: -------------------------------------------------------------------------------- 1 | .blog-item { 2 | box-sizing: border-box; 3 | display: block; 4 | width: 100%; 5 | padding: 20px; 6 | margin-bottom: 40px; 7 | background: #F8F8F8; 8 | .title { 9 | img { 10 | width: 16px; 11 | height: 20px; 12 | margin-right: 8px; 13 | } 14 | span { 15 | font-family: Avenir-Heavy; 16 | font-size: 20px; 17 | color: #666666; 18 | } 19 | } 20 | .brief-info { 21 | padding: 12px 0 20px; 22 | .author { 23 | font-family: Avenir-Heavy; 24 | font-size: 14px; 25 | color: #999; 26 | margin-right: 8px; 27 | } 28 | img { 29 | width: 14px; 30 | height: 14px; 31 | } 32 | .date { 33 | float: right; 34 | font-family: Avenir-Medium; 35 | font-size: 12px; 36 | color: #999; 37 | } 38 | } 39 | p { 40 | font-family: Avenir-Medium; 41 | font-size: 14px; 42 | color: #666; 43 | margin: 0; 44 | } 45 | &:hover { 46 | .title { 47 | span { 48 | color: #333; 49 | } 50 | } 51 | .brief-info { 52 | .author { 53 | color: #666; 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /src/pages/blog/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import cookie from 'js-cookie'; 4 | import Language from '../../components/language'; 5 | import Header from '../../components/header'; 6 | import Bar from '../../components/bar'; 7 | import PageSlider from '../../components/pageSlider'; 8 | import BlogItem from './blogItem'; 9 | import Footer from '../../components/footer'; 10 | import blogConfig from '../../../site_config/blog'; 11 | import siteConfig from '../../../site_config/site'; 12 | import { getLink } from '../../../utils'; 13 | import './index.scss'; 14 | 15 | class Blog extends Language { 16 | 17 | render() { 18 | const language = this.getLanguage(); 19 | const dataSource = blogConfig[language]; 20 | const blogs = dataSource.list; 21 | return ( 22 |
    23 |
    30 | 31 |
    32 |
    33 | 34 | { 35 | blogs.map((blog, i) => ( 36 | 37 | )) 38 | } 39 | 40 |
    41 |
    42 |

    {dataSource.postsTitle}

    43 | 50 |
    51 |
    52 |
    54 | ); 55 | } 56 | } 57 | 58 | document.getElementById('root') && ReactDOM.render(, document.getElementById('root')); 59 | 60 | export default Blog; 61 | -------------------------------------------------------------------------------- /src/pages/blog/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | @import '../../reset.scss'; 3 | 4 | .blog-list-page { 5 | .blog-container { 6 | max-width: $contentWidth; 7 | margin: 0 auto; 8 | box-sizing: border-box; 9 | padding: 50px 8% 80px; 10 | .col { 11 | display: inline-block; 12 | box-sizing: border-box; 13 | &-18 { 14 | width: 75%; 15 | border-right: 1px solid #CBCCCD; 16 | padding-right: 6%; 17 | } 18 | &-6 { 19 | width: 25%; 20 | padding-left: 20px; 21 | vertical-align: top; 22 | h4 { 23 | font-family: Avenir-Heavy; 24 | font-size: 18px; 25 | color: #333; 26 | margin: 0 0 20px; 27 | } 28 | ul { 29 | list-style: none; 30 | margin: 0; 31 | padding: 0; 32 | li { 33 | width: 100%; 34 | margin-bottom: 14px; 35 | span { 36 | font-family: Avenir-Medium; 37 | font-size: 12px; 38 | color: #666; 39 | } 40 | } 41 | } 42 | } 43 | } 44 | @media screen and (max-width: $mobileWidth){ 45 | .left-part { 46 | width: 100%; 47 | border-right: none; 48 | padding-right: 0; 49 | } 50 | .right-part { 51 | display: none; 52 | } 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /src/pages/blogDetail/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import cookie from 'js-cookie'; 4 | import { scroller } from 'react-scroll'; 5 | import path from 'path'; 6 | import Language from '../../components/language'; 7 | import Header from '../../components/header'; 8 | import Footer from '../../components/footer'; 9 | import siteConfig from '../../../site_config/site'; 10 | import './index.scss'; 11 | 12 | // 锚点正则 13 | const anchorReg = /^#[^/]/; 14 | // 相对地址正则,包括./、../、直接文件夹名称开头、直接文件开头 15 | const relativeReg = /^((\.{1,2}\/)|([\w-]+[/.]))/; 16 | class BlogDetail extends Language { 17 | 18 | constructor(props) { 19 | super(props); 20 | this.state = { 21 | __html: '', 22 | }; 23 | } 24 | 25 | componentDidMount() { 26 | // 通过请求获取生成好的json数据,静态页和json文件在同一个目录下 27 | fetch(window.location.pathname.replace(/\.html$/i, '.json')) 28 | .then(res => res.json()) 29 | .then((md) => { 30 | this.setState({ 31 | __html: md && md.__html ? md.__html : '', 32 | }); 33 | }); 34 | this.markdownContainer.addEventListener('click', (e) => { 35 | const isAnchor = e.target.nodeName.toLowerCase() === 'a' && e.target.getAttribute('href') && anchorReg.test(e.target.getAttribute('href')); 36 | if (isAnchor) { 37 | e.preventDefault(); 38 | const id = e.target.getAttribute('href').slice(1); 39 | scroller.scrollTo(id, { 40 | duration: 1000, 41 | smooth: 'easeInOutQuint', 42 | }); 43 | } 44 | }); 45 | } 46 | 47 | componentDidUpdate() { 48 | this.handleRelativeLink(); 49 | this.handleRelativeImg(); 50 | } 51 | 52 | handleRelativeLink() { 53 | const language = cookie.get('docsite_language') || siteConfig.defaultLanguage; 54 | // 获取当前文档所在文件系统中的路径 55 | // rootPath/en-us/blog/dir/hello.html => /blog/en-us/dir 56 | const splitPart = window.location.pathname.replace(`${window.rootPath}/${language}`, '').split('/').slice(0, -1); 57 | const filePath = splitPart.join('/'); 58 | const alinks = Array.from(this.markdownContainer.querySelectorAll('a')); 59 | alinks.forEach((alink) => { 60 | const href = alink.getAttribute('href'); 61 | if (relativeReg.test(href)) { 62 | // 文档之间有中英文之分,md的相对地址要转换为对应HTML的地址 63 | alink.href = `${path.join(`${window.rootPath}/${language}`, filePath, href.replace(/\.(md|markdown)$/, '.html'))}`; 64 | } 65 | }); 66 | } 67 | 68 | handleRelativeImg() { 69 | const language = cookie.get('docsite_language') || siteConfig.defaultLanguage; 70 | // 获取当前文档所在文件系统中的路径 71 | // rootPath/en-us/blog/dir/hello.html => /blog/en-us/dir 72 | const splitPart = window.location.pathname.replace(`${window.rootPath}/${language}`, '').split('/').slice(0, -1); 73 | splitPart.splice(2, 0, language); 74 | const filePath = splitPart.join('/'); 75 | const imgs = Array.from(this.markdownContainer.querySelectorAll('img')); 76 | imgs.forEach((img) => { 77 | const src = img.getAttribute('src'); 78 | if (relativeReg.test(src)) { 79 | // 图片无中英文之分 80 | img.src = `${path.join(window.rootPath, filePath, src)}`; 81 | } 82 | }); 83 | } 84 | 85 | render() { 86 | const language = this.getLanguage(); 87 | const __html = this.props.__html || this.state.__html; 88 | // 下载页借助博客页载体 89 | const isDownload = window.location.pathname.split('/').pop().replace('.html', '') === 'download'; 90 | return ( 91 |
    92 |
    99 |
    { this.markdownContainer = node; }} 102 | dangerouslySetInnerHTML={{ __html }} 103 | /> 104 |
    105 |
    106 | ); 107 | } 108 | } 109 | 110 | document.getElementById('root') && ReactDOM.render(, document.getElementById('root')); 111 | 112 | export default BlogDetail; 113 | -------------------------------------------------------------------------------- /src/pages/blogDetail/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | @import '../../reset.scss'; 3 | @import '../../markdown.scss'; 4 | 5 | .blog-detail-page { 6 | .blog-content { 7 | padding: 80px 20%; 8 | margin: $headerHeight auto 0; 9 | max-width: 735px; 10 | } 11 | } -------------------------------------------------------------------------------- /src/pages/community/contactItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { autobind } from 'core-decorators'; 3 | import { getLink } from '../../../utils'; 4 | 5 | @autobind 6 | class ContactItem extends React.Component { 7 | constructor(props) { 8 | super(props); 9 | this.state = { 10 | img: props.contact.img, 11 | }; 12 | } 13 | 14 | onMouseOver() { 15 | this.setState({ 16 | img: this.props.contact.imgHover, 17 | }); 18 | } 19 | 20 | onMouseOut() { 21 | this.setState({ 22 | img: this.props.contact.img, 23 | }); 24 | } 25 | 26 | render() { 27 | const { contact } = this.props; 28 | const { img } = this.state; 29 | return ( 30 | 38 | 39 |
    {contact.title}
    40 |
    41 | ); 42 | } 43 | } 44 | 45 | export default ContactItem; 46 | -------------------------------------------------------------------------------- /src/pages/community/contributorItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const ContributorItem = (props) => { 4 | const { contributor } = props; 5 | const { img, title, content } = contributor; 6 | return ( 7 |
    8 | 9 |
    {title}
    10 |

    {content}

    11 |
    12 | ); 13 | }; 14 | 15 | export default ContributorItem; 16 | -------------------------------------------------------------------------------- /src/pages/community/ecoItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLink } from '../../../utils'; 3 | 4 | const EcoItem = (props) => { 5 | const { eco } = props; 6 | return ( 7 |
    8 |

    {eco.title}

    9 |

    {eco.content}

    10 |
    11 | { 12 | eco.tags.map((tag, i) => ( 13 | 20 | { 21 | tag.text 22 | } 23 | 24 | )) 25 | } 26 |
    27 |
    28 | ); 29 | }; 30 | 31 | export default EcoItem; 32 | -------------------------------------------------------------------------------- /src/pages/community/eventCard.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLink } from '../../../utils'; 3 | 4 | class EventCard extends React.Component { 5 | render() { 6 | const { event } = this.props; 7 | return ( 8 |
    9 | 10 | 11 | 12 |
    13 |

    {event.title}

    14 |

    {event.content}

    15 | 16 | {event.dateStr} 17 | 18 | 19 |
    20 |
    21 | ); 22 | } 23 | } 24 | 25 | export default EventCard; 26 | -------------------------------------------------------------------------------- /src/pages/community/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import cookie from 'js-cookie'; 4 | import Language from '../../components/language'; 5 | import Header from '../../components/header'; 6 | import Bar from '../../components/bar'; 7 | import Slider from '../../components/slider'; 8 | import EventCard from './eventCard'; 9 | import ContactItem from './contactItem'; 10 | import ContributorItem from './contributorItem'; 11 | import EcoItem from './ecoItem'; 12 | import Footer from '../../components/footer'; 13 | import siteConfig from '../../../site_config/site'; 14 | import communityConfig from '../../../site_config/community.jsx'; 15 | 16 | import './index.scss'; 17 | 18 | class Community extends Language { 19 | 20 | render() { 21 | 22 | const language = this.getLanguage(); 23 | const dataSource = communityConfig[language]; 24 | return ( 25 |
    26 |
    33 | 34 |
    35 |

    {dataSource.events.title}

    36 | 37 | {dataSource.events.list.map((event, i) => ( 38 | 39 | ))} 40 | 41 |
    42 |
    43 |

    {dataSource.ecos.title}

    44 |
    45 | { 46 | dataSource.ecos.list.map((eco, i) => ( 47 | 48 | )) 49 | } 50 |
    51 |
    52 |
    53 |

    {dataSource.contacts.title}

    54 |

    {dataSource.contacts.desc}

    55 |
    56 | { 57 | dataSource.contacts.list.map((contact, i) => ( 58 | 59 | )) 60 | } 61 |
    62 |
    63 |
    64 |

    {dataSource.contributorGuide.title}

    65 |

    {dataSource.contributorGuide.desc}

    66 |
    67 | { 68 | dataSource.contributorGuide.list.map((contributor, i) => ( 69 | 70 | )) 71 | } 72 |
    73 |
    74 |
    75 |
    76 | ); 77 | } 78 | } 79 | 80 | document.getElementById('root') && ReactDOM.render(, document.getElementById('root')); 81 | 82 | export default Community; 83 | -------------------------------------------------------------------------------- /src/pages/documentation/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import cookie from 'js-cookie'; 4 | import { scroller } from 'react-scroll'; 5 | import 'whatwg-fetch'; // fetch polyfill 6 | import path from 'path'; 7 | import Language from '../../components/language'; 8 | import Header from '../../components/header'; 9 | import Bar from '../../components/bar'; 10 | import Sidemenu from '../../components/sidemenu'; 11 | import Footer from '../../components/footer'; 12 | import siteConfig from '../../../site_config/site'; 13 | import docsConfig from '../../../site_config/docs'; 14 | import './index.scss'; 15 | 16 | // 锚点正则 17 | const anchorReg = /^#[^/]/; 18 | // 相对地址正则,包括./、../、直接文件夹名称开头、直接文件开头 19 | const relativeReg = /^((\.{1,2}\/)|([\w-]+[/.]))/; 20 | 21 | class Documentation extends Language { 22 | 23 | constructor(props) { 24 | super(props); 25 | this.state = { 26 | __html: '', 27 | }; 28 | } 29 | 30 | componentDidMount() { 31 | // 通过请求获取生成好的json数据,静态页和json文件在同一个目录下 32 | fetch(window.location.pathname.replace(/\.html$/i, '.json')) 33 | .then(res => res.json()) 34 | .then((md) => { 35 | this.setState({ 36 | __html: md && md.__html ? md.__html : '', 37 | }); 38 | }); 39 | this.markdownContainer.addEventListener('click', (e) => { 40 | const isAnchor = e.target.nodeName.toLowerCase() === 'a' && e.target.getAttribute('href') && anchorReg.test(e.target.getAttribute('href')); 41 | if (isAnchor) { 42 | e.preventDefault(); 43 | const id = e.target.getAttribute('href').slice(1); 44 | scroller.scrollTo(id, { 45 | duration: 1000, 46 | smooth: 'easeInOutQuint', 47 | }); 48 | } 49 | }); 50 | } 51 | 52 | componentDidUpdate() { 53 | this.handleRelativeLink(); 54 | this.handleRelativeImg(); 55 | } 56 | 57 | handleRelativeLink() { 58 | const language = cookie.get('docsite_language') || siteConfig.defaultLanguage; 59 | // 获取当前文档所在文件系统中的路径 60 | // rootPath/en-us/docs/dir/hello.html => /docs/en-us/dir 61 | const splitPart = window.location.pathname.replace(`${window.rootPath}/${language}`, '').split('/').slice(0, -1); 62 | const filePath = splitPart.join('/'); 63 | const alinks = Array.from(this.markdownContainer.querySelectorAll('a')); 64 | alinks.forEach((alink) => { 65 | const href = alink.getAttribute('href'); 66 | if (relativeReg.test(href)) { 67 | // 文档之间有中英文之分,md的相对地址要转换为对应HTML的地址 68 | alink.href = `${path.join(`${window.rootPath}/${language}`, filePath, href.replace(/\.(md|markdown)$/, '.html'))}`; 69 | } 70 | }); 71 | } 72 | 73 | handleRelativeImg() { 74 | const language = cookie.get('docsite_language') || siteConfig.defaultLanguage; 75 | // 获取当前文档所在文件系统中的路径 76 | // rootPath/en-us/docs/dir/hello.html => /docs/en-us/dir 77 | const splitPart = window.location.pathname.replace(`${window.rootPath}/${language}`, '').split('/').slice(0, -1); 78 | splitPart.splice(2, 0, language); 79 | const filePath = splitPart.join('/'); 80 | const imgs = Array.from(this.markdownContainer.querySelectorAll('img')); 81 | imgs.forEach((img) => { 82 | const src = img.getAttribute('src'); 83 | if (relativeReg.test(src)) { 84 | // 图片无中英文之分 85 | img.src = `${path.join(window.rootPath, filePath, src)}`; 86 | } 87 | }); 88 | } 89 | 90 | render() { 91 | const language = this.getLanguage(); 92 | // 开发者页借助文档页载体 93 | const dataSource = docsConfig[language]; 94 | const __html = this.props.__html || this.state.__html; 95 | return ( 96 |
    97 |
    104 | 105 |
    106 | 107 |
    { this.markdownContainer = node; }} 110 | dangerouslySetInnerHTML={{ __html }} 111 | /> 112 |
    113 |
    114 |
    115 | ); 116 | } 117 | } 118 | 119 | document.getElementById('root') && ReactDOM.render(, document.getElementById('root')); 120 | 121 | export default Documentation; 122 | -------------------------------------------------------------------------------- /src/pages/documentation/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../variables.scss'; 2 | @import '../../reset.scss'; 3 | @import '../../markdown.scss'; 4 | 5 | .documentation-page { 6 | .content-section { 7 | max-width: $contentWidth; 8 | margin: 0 auto; 9 | box-sizing: border-box; 10 | padding: 40px 40px 60px; 11 | position: relative; 12 | min-height: 1100px; 13 | .doc-content { 14 | display: inline-block; 15 | vertical-align: top; 16 | box-sizing: border-box; 17 | padding: 20px 6% 0; 18 | width: calc(100% - #{$sideMenuWidth}); 19 | } 20 | } 21 | @media screen and (max-width: $mobileWidth) { 22 | .content-section { 23 | padding-left: 20px; 24 | padding-right: 20px; 25 | .doc-content { 26 | width: 100%; 27 | } 28 | } 29 | .sidemenu { 30 | position: absolute; 31 | z-index: 100; 32 | left: 0; 33 | top: 40px; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/pages/home/featureItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const Item = (props) => { 4 | const { feature } = props; 5 | return ( 6 |
  • 7 | 8 |
    9 |

    {feature.title}

    10 |

    {feature.content}

    11 |
    12 |
  • 13 | ); 14 | }; 15 | 16 | export default Item; 17 | -------------------------------------------------------------------------------- /src/reset.scss: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | } 5 | a { 6 | text-decoration: none; 7 | } 8 | h1, h2, h3, h4, h5, h6 { 9 | font-weight: 400; 10 | } 11 | -------------------------------------------------------------------------------- /src/variables.scss: -------------------------------------------------------------------------------- 1 | // 品牌色 2 | $brandColor: #2DACEC; 3 | // 渐变起始色 4 | $startColor: #04C0C6; 5 | // 渐变中间色 6 | $intermediateColor: #2BA3DE; 7 | // 渐变结束色 8 | $endColor: #835BE3; 9 | // 侧边菜单背景色 10 | $sideMenuBgColor: #f8f8f8; 11 | // 顶部悬浮菜单背景色,用于移动端 12 | $headerMenuBgColor: #f8f8f8; 13 | 14 | 15 | // 头部高度 16 | $headerHeight: 66px; 17 | // 侧边栏宽度 18 | $sideMenuWidth: 295px; 19 | // bar高度 20 | $barHeight: 200px; 21 | // 切换到移动端显示屏宽界限 22 | $mobileWidth: 640px; 23 | // 页面主体最大宽度 24 | $contentWidth: 1280px; -------------------------------------------------------------------------------- /template.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <%= title %> 11 | 12 | 13 | 14 | 15 |
    <%- __html %>
    16 | 17 | 18 | 21 | 22 | 23 | 24 | 31 | 32 | -------------------------------------------------------------------------------- /utils/index.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/prefer-default-export */ 2 | export const throttle = (fn, delay) => { 3 | let timer = null; 4 | return function (...args) { 5 | const context = this; 6 | clearTimeout(timer); 7 | timer = setTimeout(() => { 8 | fn.apply(context, args); 9 | }, delay); 10 | }; 11 | }; 12 | 13 | export const getScrollTop = () => { 14 | let scrollTop = 0; 15 | if (document.documentElement && document.documentElement.scrollTop) { 16 | scrollTop = document.documentElement.scrollTop; 17 | } else if (document.body) { 18 | scrollTop = document.body.scrollTop; 19 | } 20 | return scrollTop; 21 | }; 22 | 23 | export const getLink = (link) => { 24 | if (`${link}`.length > 1 && /^\/[^/]/.test(`${link}`)) { 25 | return `${window.rootPath}${link}`; 26 | } 27 | return link; 28 | }; 29 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const fs = require('fs'); 3 | const webpack = require('webpack'); 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin'); 5 | 6 | const entry = {}; 7 | const targetPath = path.join(__dirname, './src/pages'); 8 | fs.readdirSync(targetPath).forEach((page) => { 9 | if (fs.statSync(path.join(targetPath, page)).isDirectory() && fs.existsSync(path.join(targetPath, page, 'index.jsx'))) { 10 | entry[page] = path.join(targetPath, page, 'index.jsx'); 11 | } 12 | }); 13 | module.exports = { 14 | entry, 15 | output: { 16 | path: path.join(__dirname, 'build'), 17 | filename: '[name].js', 18 | }, 19 | externals: { 20 | react: 'React', 21 | 'react-dom': 'ReactDOM', 22 | }, 23 | module: { 24 | loaders: [ 25 | { 26 | test: /\.js|jsx$/, 27 | exclude: [/node_modules/, /build\/lib/, /\.min\.js$/], 28 | use: 'babel-loader', 29 | }, 30 | { 31 | test: /\.(s)?css$/, 32 | use: ExtractTextPlugin.extract({ 33 | fallback: 'style-loader', 34 | use: [ 35 | 'css-loader', 36 | { 37 | loader: 'resolve-url-loader', 38 | options: { 39 | keepQuery: true, 40 | }, 41 | }, 42 | { 43 | loader: 'sass-loader', 44 | options: { 45 | sourceMap: true, // 结合resolve-url-loader使用必填,详见https://www.npmjs.com/package/resolve-url-loader 46 | sourceMapContents: true, 47 | }, 48 | }, 49 | ], 50 | }), 51 | }, 52 | { 53 | test: /\.(woff|woff2|eot|ttf|otf|svg)((\?|#).*)?$/, 54 | use: [{ 55 | loader: 'file-loader', 56 | options: { 57 | name: '[name].[ext]', 58 | }, 59 | }], 60 | }, 61 | { 62 | test: /\.json?$/, 63 | exclude: /node_modules/, 64 | use: 'json-loader', 65 | }, 66 | ], 67 | }, 68 | resolve: { 69 | extensions: ['.js', '.jsx', '.json'], 70 | }, 71 | plugins: [ 72 | new webpack.NoEmitOnErrorsPlugin(), 73 | new webpack.optimize.OccurrenceOrderPlugin(), 74 | new ExtractTextPlugin('[name].css'), 75 | ] 76 | }; 77 | --------------------------------------------------------------------------------