Dubbo服务+Nacos注册中心+SpringBoot注解 例子
准备工作
- IDEA
- Dubbo整体架构了解
- Nacos知识储备
- SpringBoot知识储备
项目结构
父项目Maven,子项目均为SpringBoot
common:服务
provider:生产者
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>
<groupId>com.sasu</groupId>
<artifactId>DubboExample</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>dubbo-example-common</module>
<module>nacos-dubbo-provider</module>
<module>nacos-dubbo-consumer</module>
</modules>
<name>DubboExample</name>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
dubbo-example-common 服务
- 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>DubboExample</artifactId>
<groupId>com.sasu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>dubbo-example-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-example-common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- HelloService
package com.sasu.service;
public interface HelloService {
String sayHello(String name);
}
nacos-dubbo-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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>DubboExample</artifactId>
<groupId>com.sasu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>nacos-dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-dubbo-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.sasu</groupId>
<artifactId>dubbo-example-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!-- Dubbo Registry Nacos -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- application.yml
spring:
application:
name: nacos-dubbo-provider
dubbo:
scan:
base-packages: com.sasu.service
protocol:
name: dubbo
port: -1
registry:
address: nacos://127.0.0.1:8848
service:
version: 1.0.0
- HelloServiceImpl
package com.sasu.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Value;
@Service(version = "${dubbo.service.version}")
public class HelloServiceImpl implements HelloService {
@Value("${spring.application.name}")
private String serviceName;
@Override
public String sayHello(String name) {
return String.format("[%s] : Hello , %s", serviceName, name);
}
}
nacos-dubbo-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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>DubboExample</artifactId>
<groupId>com.sasu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>nacos-dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-dubbo-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.sasu</groupId>
<artifactId>dubbo-example-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring Boot dependencies -->
<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>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!-- Dubbo Registry Nacos -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- application.yml
spring:
application:
name: nacos-dubbo-consumer
dubbo:
registry:
address: nacos://127.0.0.1:8848
service:
version: 1.0.0
server:
port: 9001
- HelloController
package com.sasu.controller;
import com.sasu.service.HelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Reference(version = "${dubbo.service.version}")
private HelloService helloService;
@GetMapping(value = "/hello/{name}")
public String hello(@PathVariable("name") String name) {
return helloService.sayHello(name);
}
}
运行测试
- 运行Nacos
运行startup.cmd
输入地址账号密码均为nacos http://127.0.0.1:8848/nacos/index.html
- 启动生产者:NacosDubboProviderApplication
- 启动消费者:NacosDubboConsumerApplication
- 输入http://localhost:9001/hello/demo,显示出下图,你就完成Nacos+Dubbo+SpringBoot的demo啦,其余的Dubbo知识可以参考官方文档http://dubbo.apache.org/en-us/