微服务搭建(SpringBoot + Dubbo + Nacos)

发布于:2025-09-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

1.项目接口

2. 编辑pom.xml和application.yml文件

2.1父工程

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>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <relativePath/>
    </parent>

    <groupId>com.hanxun</groupId>
    <artifactId>crmbe-service-backend</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>

    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>2.7.10</spring.boot.version>
        <dubbo.version>3.0.10</dubbo.version>
        <nacos-client.version>2.1.1</nacos-client.version>
    </properties>

   <modules>
        <module>crmbe-api</module>
        <module>crmbe-consumer</module>
        <module>crmbe-provider</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring.boot.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- Dubbo核心依赖 -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <!-- 排除适配层自带的 Nacos 客户端,避免版本冲突 -->
                    <exclusion>
                        <groupId>com.alibaba.nacos</groupId>
                        <artifactId>nacos-client</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- Nacos 客户端核心依赖 -->
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.spring</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>1.0.11</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>30.1-jre</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

2.2 api 模块

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>
        <groupId>com.hanxun</groupId>
        <artifactId>crmbe-service-backend</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>com.hanxun</groupId>
    <artifactId>crmbe-api</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
    </dependencies>

</project>

2.3 consumer 模块

代码结构:

dubbo注解:

Controller中使用 @DubboReference  进行依赖注入

@RestController
@RequestMapping("/test")
public class UserController {

    @DubboReference(version = "1.0")
    private UserService userService;

    @GetMapping("/get")
    public Object get(String id){

       List<SysUser> userList= userService.getUserList();

//        return "hello world !!!";
        return userList;
    }
}
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>
        <groupId>com.hanxun</groupId>
        <artifactId>crmbe-service-backend</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>com.hanxun</groupId>
    <artifactId>crmbe-consumer</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hanxun</groupId>
            <artifactId>crmbe-api</artifactId>
            <version>1.0</version>
        </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>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
 yml文件
# 应用名称
spring:
  application:
    name: crmbe-consumer
#  cloud:
    # Nacos配置中心
#    nacos:
#      server-addr: 127.0.0.1:8848 # Nacos 服务器地址
#      username: nacos # Nacos 账号
#      password: nacos # Nacos 密码
#      discovery: # 【配置中心】配置项
#        namespace: dev # 命名空间。这里使用 dev 开发环境
#        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
#        metadata:
#          version: 1.0.0 # 服务实例的版本号,可用于灰度发布
#      config: # 【注册中心】配置项
#        namespace: dev # 命名空间。这里使用 dev 开发环境
#        group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
  config:
    import:
      - optional:nacos:application.yml
      - optional:nacos:${spring.application.name}.yml

# Dubbo配置
dubbo:
  application:
    name: crmbe-consumer
    logger: slf4j
  protocol:
    name: dubbo
    port: -1
  registry:
    address: nacos://127.0.0.1:8848
    parameters:
      namespace: dev

# 服务端口
server:
  port: 8082
  servlet:
    context-path: /crmbe-consumer

2.4 provider模块

代码结构:

dubbo 注解:

UserSeviceImpl 使用 @DubboService 注解 暴露服务

@DubboService(version = "1.0")
public class UserSeviceImpl implements UserService {


    @Override
    public List<SysUser> getUserList() {
        List<SysUser> userlist = new ArrayList<SysUser>();
        SysUser user1 = new SysUser("张三",20, LocalDateTime.now());
        SysUser user2 = new SysUser("李四",30,LocalDateTime.now());
        SysUser user3 = new SysUser("王五",31,LocalDateTime.now());
        userlist.add(user1);
        userlist.add(user2);
        userlist.add(user3);
        userlist.add(user3);
        return userlist;
    }
}

Application 类加 @EnableDubbo

@EnableDubbo
@SpringBootApplication
public class CrmbeProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(CrmbeProviderApplication.class, args);

        System.out.println("--------------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>
        <groupId>com.hanxun</groupId>
        <artifactId>crmbe-service-backend</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>crmbe-provider</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hanxun</groupId>
            <artifactId>crmbe-api</artifactId>
            <version>1.0</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>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>


    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- 明确指定 Java 版本为 1.8 -->
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- 可选:指定编码 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
</project>
 yml文件
# 应用名称
spring:
  application:
    name: crmbe-provider
  config:
    import:
      - optional:nacos:application.yml
      - optional:nacos:${spring.application.name}.yml

# Dubbo配置
dubbo:
  application:
    name: crmbe-provider
    logger: slf4j
  protocol:
    name: dubbo
    port: -1
  registry:
    address: nacos://127.0.0.1:8848
    parameters:
      namespace: dev
  config-center:
    address: nacos://127.0.0.1:8848
    parameters:
      namespace: dev
  scan:
    base-packages: com.hanxun


# 服务端口
server:
  port: 8081


网站公告

今日签到

点亮在社区的每一天
去签到