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

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
相关推荐
IT小哥哥呀1 小时前
Jenkins + Docker 打造自动化持续部署流水线
docker·微服务·自动化·jenkins·springboot·高并发·限流
亚林瓜子1 小时前
Spring中的异步任务(CompletableFuture版)
java·spring boot·spring·async·future·异步
小蒜学长3 小时前
springboot基于Java的校园导航微信小程序的设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序
虾米Life3 小时前
基于微服务脚手架的视频点播系统 (仿B站) [客户端] -1
c++·qt·微服务·架构
悠闲蜗牛�3 小时前
智能时代技术融合之道:大模型、微服务与数据安全的系统化实践
微服务·云原生·架构
Q_Q19632884753 小时前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
neoooo3 小时前
⚙️ Spring Boot × @RequiredArgsConstructor:写出最干净的依赖注入代码
spring boot·后端·spring
Q_Q5110082854 小时前
python+django/flask的篮球馆/足球场地/运动场地预约系统
spring boot·python·django·flask·node.js·php
Q_Q5110082855 小时前
python+django/flask的城市供水管网爆管预警系统-数据可视化
spring boot·python·django·flask·node.js·php
JosieBook6 小时前
【SpringBoot】31 核心功能 - 单元测试 - JUnit5 单元测试中的断言机制——验证你的代码是否按预期执行了
spring boot·单元测试·log4j