微服务搭建(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
相关推荐
MetaLite4 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
凤山老林4 小时前
聊聊企业级 API 安全:Spring Boot 落地 OAuth 2.1、mTLS 与接口签名防篡改
spring boot·后端·安全·oauth
Bs_MoneyMagnet11 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
ID346107442011 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
vx-程序开发14 小时前
【毕设分享】springboot废品上门回收微信小程序---附源码94491
java·spring boot·毕业设计·源码·课程设计·毕设·大作业
行百里er15 小时前
Spring Insight 里如何对 Span 进行清洗
spring boot·spring cloud·监控
谢亮_vipxieliang15 小时前
ValidX时间段验证详解:ISO 8601标准与简化格式
java·spring boot·后端·spring·spring cloud·hibernate
Bs_MoneyMagnet16 小时前
基于springboot+vue的爱心众筹系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·管理系统
2601_9622184716 小时前
万象生鲜系统协议价底层架构实现生鲜企业报价业务数字化管理
大数据·运维·微服务·云原生·架构
EatFan17 小时前
从单体到模块化:我的 Spring Boot 项目为什么拆成 framework、module、server?
java·spring boot·后端