Springboot + nacos + dubbo 实现微服务架构
第一步.准备nacos
我们要准备好nacos工具官网:Nacos 快速开始 | Nacos 官网
下载安装很简单,直接去官网看
启动命令:先进入bin目录 执行
sh startup.sh -m standalone
如果是window电脑
执行startup.cmd -m standalone命令以独立模式启动服务器。或者,您也可以双击 startup.cmd
来运行 NacosServer
第二步.搭建微服务项目框架
一般微服务在父项目下新建3个字模块
api模块定义接口
consumer模块用来消费接口
provider模块用来提供接口实现
下图是项目结构
下面我们来搭建项目
先新建一个父项目dubbo-spring-boot
建好父项目然后建3个字模块dubbo-spring-boot-api,dubbo-spring-boot-provider,dubbo-spring-boot-consumer我这里演示一个,其他两步骤一样只需要修改名字
建好项目我们需要添加pom依赖以及配置项目内容
配置父节点
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>dubbo-spring-boot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>dubbo-spring-boot-api</module>
<module>dubbo-spring-boot-provider</module>
<module>dubbo-spring-boot-consumer</module>
</modules>
<properties>
<dubbo.version>3.0.7</dubbo.version>
<spring-boot.version>2.6.7</spring-boot.version>
<lombok.version>1.18.24</lombok.version>
<lombok.version>1.18.20</lombok.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- nacos作注册中心-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置dubbo-spring-boot-api
这模块用来定义接口,我们先新建一个org.apache.dubbo包,新建一个接口。
public interface ITestService {
String sayHello(String name);
}
配置dubbo-spring-boot-provider
这个模块用来实现接口
先配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>dubbo-spring-boot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dubbo-spring-boot-provider</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-spring-boot-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
配置application.yml
server:
port: 8001
spring:
application:
name: dubbo-spring-boot-provider
dubbo:
protocol:
name: dubbo
port: 20881
# 注册中心地址
registry:
address: nacos://192.168.10.61:8848
application:
name: dubbo-provider
新建org.apache.dubbo.provider.api.impl包,新增ITestService实现类TestServiceImpl
并需要用@DubboService来注解
@DubboService(group = "test", version = "1.0.0")
public class TestServiceImpl implements ITestService {
@Override
public String sayHello(String name) {
return "hello:" + name;
}
}
启动类 需要用@EnableDubbo来注解
@EnableDubbo
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
配置dubbo-spring-boot-consumer
这个模块用来调用我们实现的接口
配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>dubbo-spring-boot</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dubbo-spring-boot-consumer</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-spring-boot-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- spring boot starter -->
<!-- spring boot starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
配置application.yml
server:
port: 8002
spring:
application:
name: dubbo-spring-boot-consumer
dubbo:
protocol:
name: dubbo
port: 20881
# 注册中心地址
registry:
address: nacos://192.168.10.61:8848
application:
name: dubbo-consumer
consumer:
# 负载均衡策略
loadbalance: roundrobin
新增org.apache.dubbo.consumer包下新增controller
@RestController
@RequestMapping("/consumer")
public class TestController {
@DubboReference(group = "test", version = "1.0.0", timeout = 6000)
private ITestService iTestService;
@GetMapping("test")
public String test(String str){
return iTestService.sayHello(str);
}
}
启动类:
@EnableDubbo
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
到此我们就完成了所有配置,最后进行测试
我们先看一下nacos注册的服务访问http://127.0.0.1:8848/nacos
可以看到我们服务已经注册到nacos中
下面调用,可以看到调用成功