本文主要讲解dubbo项目基本搭建过程,使用nacos作为注册中心。至于如何安装nacos,我前面的文章已经讲解过,本文不再重复。
一、搭建项目
创建一个父模块项目,引入springboot常用基础依赖,这里使用springboot3版本。在pom.xml文件底部引入如下配置:
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- 开发环境 --> <profile.name>dev</profile.name> <!--nacos服务访问地址--> <nacos.server-addr>127.0.0.1:8848</nacos.server-addr> <!--命名空间id--> <nacos.namespace>75d49a80-72f9-4b15-97b8-08ad100100b0</nacos.namespace> <!--nacos用户名和密码--> <nacos.username>nacos</nacos.username> <nacos.password>nacos</nacos.password> </properties> </profile> <profile> <id>test</id> <properties> <!-- 测试环境,打包命令:mvn clean install -Ptest --> <profile.name>test</profile.name> <nacos.server-addr>127.0.0.1:8848</nacos.server-addr> <nacos.namespace></nacos.namespace> <nacos.username></nacos.username> <nacos.password></nacos.password> </properties> </profile> <profile> <id>prod</id> <properties> <!-- 生产环境,打包命令:mvn clean install -Pprod --> <profile.name>prod</profile.name> <nacos.server-addr>127.0.0.1:8848</nacos.server-addr> <nacos.namespace></nacos.namespace> <nacos.username></nacos.username> <nacos.password></nacos.password> </properties> </profile> </profiles>
上述配置中,配置了nacos服务器地址,用户名信息,可以很方便的进行环境切换。而后面的子模块的配置也可以直接读取上述配置。
创建一个子模块,名为service-dubbo-api,该模块用于编写公共的接口。我们编写一个接口示例:
public interface DemoService { String test(); }
我们再创建两个子模块service-dubbo-consumer和service-dubbo-provider,两个子模块分别引入如下相同的依赖。同时引入上一步骤中创建的模块作为依赖,下面xml中没有列出,需自行引入service-dubbo-api。
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>2.2.3</version> </dependency>
注意:很多地方引入的依赖是:dubbo-registry-nacos,实际上上述两个依赖就已经包含了dubbo-registry-nacos依赖中的内容,所以没必要。
编写service-dubbo-provider模块,我们在该模块中编写service-dubbo-api模块中DemoService接口的实现类,并且使用@DubboService注解标注,dubbo服务最终会根据该注解找到所有实现的服务,并注册到注册中心。
@DubboService public class DemoServiceImpl implements DemoService { @Override public String test() { return "hello world"; } }
该模块的application.yaml配置文件内容如下:
server: port: 8009 spring: application: name: dubbo-provider dubbo: application: name: ${spring.application.name} #必须指定服务名,作用和微服务中spring.application.name的作用类似 qos-port: 18009 #该端口需要手动指定,否则多个服务的默认值会导致冲突。 registry: address: nacos://localhost:8848?username=@nacos.username@&password=@nacos.password@ parameters.namespace: @nacos.namespace@ #nacos命名空间 register-mode: interface #instance 向注册中心注册应用级服务,会注册一个名为dubbo-provider的服务 interface 注册接口级服务 all 同时注册
register-mode的默认值是all,可以将整个模块作为一个服务注册到nacos中,同时还会将具体的@DubboService注解的相关服务注册到注册中心。
然后在启动类上使用@EnableDubbo注解标注。
@EnableDubbo @SpringBootApplication public class ServiceDubboProviderApplication { public static void main(String[] args) { SpringApplication.run(ServiceDubboProviderApplication.class, args); } }
编写service-dubbo-consumer模块,编写一个controller使用服务提供者提供的服务实现,代码如下:
@RestController @RequestMapping public class TestController { @DubboReference DemoService demoService; @GetMapping("/") public String test() { return demoService.test(); } }
启动类和服务提供者类似,加上@EnableDubbo注解即可。
@EnableDubbo @SpringBootApplication public class ServiceDubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(ServiceDubboConsumerApplication.class, args); } }
application.yaml配置文件和服务提供者也是类似,只有端口号和服务名不同。
server: port: 8008 spring: application: name: dubbo-consumer dubbo: application: name: ${spring.application.name} #必须指定服务名,作用和微服务中spring.application.name的作用类似 qos-port: 18008 #该端口需要手动指定,否则多个服务的默认值会导致冲突。 registry: address: nacos://localhost:8848?username=@nacos.username@&password=@nacos.password@ parameters.namespace: @nacos.namespace@ #nacos命名空间 register-mode: interface #instance 向注册中心注册应用级服务,会注册一个名为dubbo-provider的服务 interface 注册接口级服务 all 同时注册
先启动nacos,然后启动service-dubbo-provider模块,最后启动service-dubbo-consumer模块,注意启动顺序。最后访问localhost:8008 观看效果。
评论区