微服务搭建(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
相关推荐
小马爱打代码1 天前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
麦聪聊数据1 天前
利用SQL2API模式重构微服务中的数据查询层
数据库·sql·低代码·微服务·架构
东东5161 天前
xxx食堂移动预约点餐系统 (springboot+微信小程序)
spring boot·微信小程序·小程序·毕业设计·个人开发·毕设
csdn2015_1 天前
springboot task
java·spring boot·后端
czlczl200209251 天前
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)
java·spring boot·后端
码界奇点1 天前
基于Spring Boot和Vue3的无头内容管理系统设计与实现
java·spring boot·后端·vue·毕业设计·源代码管理
九皇叔叔1 天前
【03】微服务系列 之Nacos 注册中心(服务注册)
java·微服务·nacos·架构·注册中心·服务注册
你才是臭弟弟1 天前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端
what丶k1 天前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
RwTo1 天前
【源码】- SpringBoot启动
java·spring boot·spring