目标从零开始开发基于Dubbo的微服务环境要求低系统:Windows、Linux、MacOSJDK8及以上(推荐使用JDK17)GitIntelliJIDEA(可选)Docker(可选)动手实践本章将教您如何通过分步教程从头开始开发微服务应用程序。1.启动注册中心对于一个微服务应用来说,注册中心是必不可少的组件。消费者只有通过注册中心,才能成功发现服务器的地址信息,进而进行调用。为了使本教程更容易上手,我们提供了一个基于ApacheZookeeper注册表的简单启动器。如果您需要在生产环境中部署registry,请参考生产环境初始化一文部署高可用registry。Windows:gitclone--depth=1--branchmastergit@github.com:apache/dubbo-samples.gitcddubbo-samples./mvnw.cmdcleancompileexec:java-pltools/embedded-zookeeperLinux/MacOS:gitclone--depth=1--branchmastergit@github.com:apache/dubbo-samples.gitcddubbo-samples./mvnwcleancompileexec:java-pltools/embedded-zookeeperDocker:dockerrun--namesome-zookeeper--restartalways-dzookeeper2。初始化项目从本节开始,将基于IntelliJIDEA构建和测试项目。如上图,一个基础工程就可以搭建起来了。初始化项目后,需要在src/main/java目录下创建org.apache.dubbo.samples.api、org.apache.dubbo.samples.client和org.apache.dubbo.samples.provider三个包。以后我们会在api下创建相应的接口,在client下创建相应的客户端订阅服务的功能,在provider下创建相应的server实现和发布服务的功能。以上三个包分别对应应用所依赖的API、消费端应用的模块、服务端应用的模块。实际部署时需要拆分成三个项目,consumer和service的共同依赖就是api模块。本教程从简单出发,将在同一个项目中开发,以区分多个启动类。3、添加Maven依赖初始化项目后,我们需要先添加Dubbo相关的maven依赖。编辑pom.xml文件并添加以下配置。org.apache.dubbodubbo3.2.0-beta.4org.apache.curatorcurator-x-discovery<版本>4.3.0org.apache.zookeeperzookeeper3.8.0io.nettynetty-handler<排除><组号>io.nettynetty-transport-native-epoll在这个配置中定义了dubbo和zookeeper(以及相应的connectorcurator)添加以上配置后,可以通过IDEA的Maven-ReloadAllMavenProjects刷新依赖。4.定义服务接口服务接口Dubbo是连接消费者和服务端的桥梁。在org.apache.dubbo.samples.api下创建GreetingsService接口,定义如下:packageorg.apache.dubbo.samples.api;publicinterfaceGreetingsService{StringsayHi(Stringname);}在GreetingsService中,定义了方法sayHi。后续服务端发布的服务和消费者订阅的服务都是围绕GreetingsService接口开发的。5.定义服务端的实现定义好服务接口后,就可以在服务端定义相应的实现了。相对于consumer端,这部分实现是远程实现,本地没有相关资料。在org.apache.dubbo.samples.provider下创建GreetingsServiceImpl类,定义如下:packageorg.apache.dubbo.samples.provider;导入org.apache.dubbo.samples.api.GreetingsService;公共类GreetingsServiceImpl实现GreetingsService{@OverridepublicStringsayHi(Stringname){return"hi,"+name;}}在GreetingsServiceImpl中,实现了GreetingsService接口,sayHi方法返回hi,name。6、服务端发布服务实现服务后,本节将通过Dubbo的API将服务发布到网络上。在org.apache.dubbo.samples.provider下建应用类,定义如下:packageorg.apache.dubbo.samples.provider;importorg.apache.dubbo.config.ProtocolConfig;importorg.apache.dubbo.config.RegistryConfig;importorg.apache.dubbo.config.ServiceConfig;importorg.apache.dubbo.config.bootstrap.DubboBootstrap;importorg.apache.dubbo.samples.api.GreetingsService;publicclassApplication{publicstaticvoidmain(String[]args){//定义具体的服务ServiceConfigservice=newServiceConfig<>();service.setInterface(GreetingsService.class);service.setRef(newGreetingsServiceImpl());//启动DubboDubboBootstrap.getInstance().application("first-dubbo-provider").registry(newRegistryConfig("zookeeper://127.0.0.1:2181")).protocol(newProtocolConfig("dubbo",-1)).service(服务).start()。等待();}}在org.apache.dubbo.samples.provider.Application中有两个作用:一是定义基于ServiceConfig发布的服务信息,包括接口信息和对应的实现类对象;然后是配置Dubbo启动器,传入应用名称、注册中心地址、协议信息、服务信息。注意:DubboBootstrap中的注册中心、协议、服务可以多次传入。7.消费者订阅和调用对于消费者,消费者可以通过Dubbo的API进行订阅。在org.apache.dubbo.samples.client下建立Application类,定义如下:packageorg.apache.dubbo.samples.client;importjava.io.IOException;importorg.apache.dubbo.config.ReferenceConfig;importorg.apache.dubbo.config.RegistryConfig;importorg.apache.dubbo.config.bootstrap.DubboBootstrap;importorg.apache.dubbo.samples.api.GreetingsService;publicclassApplication{publicstaticvoidmain(String[]args)抛出IOException{ReferenceConfigreference=newReferenceConfig<>();reference.setInterface(GreetingsService.class);DubboBootstrap.getInstance().application("first-dubbo-consumer").registry(newRegistryConfig("zookeeper://127.0.0.1:2181")).reference(reference);GreetingsServiceservice=reference.get();Stringmessage=service.sayHi("dubbo");System.out.println("接收结果======>"+me消息);系统.in.read();}}org.apache.dubbo.samples.client.Application中有3个函数:首先,它定义了基于ReferenceConfig的订阅服务信息,包括接口信息;其次,配置Dubbo启动器,传入应用名称、注册中心地址、协议信息、服务信息。最后获取动态代理的对象并调用。注意:DubboBootstrap支持服务和引用可以同时传入,也就是说一个应用可以同时是消费者和服务端。8.启动应用程序到第7步结束时,代码已经开发完成。本节将启动整个项目并进行验证。首先是启动org.apache.dubbo.samples.provider.Application,稍等片刻,看到如下图的日志(DubboBootstrapawaiting),说明服务提供者启动了,说明服务提供者可以对外提供服务。[DUBBO]DubboBootstrapawaiting...,dubbo版本:3.2.0-beta.4,当前主机:169.254.44.42然后启动org.apache.dubbo.samples.client.Application,等待一会出现如图下图中的日志(hi,dubbo)表示服务消费者已经启动,并成功调用服务端获取结果。接收结果======>hi,dubbo扩展阅读1.Dubbo配置介绍Dubbo的主要配置入口有ReferenceConfig、ServiceConfig和DubboBootstrap。更多详情请参考文章API配置|阿帕奇达博。2、除了API方式,Dubbo除了API方式,还支持SpringXML、Annotation、SpringBoot等配置方式。在接下来的教程中,我们将讲解如何通过SpringBoot的配置方法进行快速开发。关于XML和Annotation的详细信息,请参考XML配置|ApacheDubbo,注解配置|ApacheDubbo问题。更多本教程介绍如何基于Dubbo的纯API开发微服务应用。在接下来的教程中,我们将介绍如何基于SpringBoot开发微服务项目。欢迎来到DubboStarhttps://github.com/apache/dubbo。搜索并关注官方微信公众号:ApacheDubbo,了解更多行业最新动态,掌握各大厂面试必备的Dubbo技能