cloud-dubbo-nacos 简单整合

登录

1.前端执行登录,是放在 vuex.user.js中执行登录操作,并记录相关信息,缓存相关信息

后端登录:

spring-cloud dubbo微服务 使用nacos为注册中心,整合

================================================

项目架构

下载nacos 服务端

配置启动nacos服务    启动服务

内容

  1. 服务模块使用 api模块的接口,定义实体类

  2. order服务模块和user服务模块使用api模块的接口实现服务,使用domain模块的实体类

  3. order服务模块和user服务模块注册到nacos注册中心,user模块通过注册中心调用order模块服务

  4. user模块使用nacos注册中心的配置文件

父工程

pom配置文件

注意版本spring-cloud ,spring-cloud-alibaba,springboot版本号对应

<?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>
    <groupId>com.nsk666</groupId>
    <artifactId>cloud-dubbo-nacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>cloud-dubbo-nacos</name>
    <description>cloud-dubbo-nacos</description>
    <modules>
        <module>dubbo-api</module>
        <module>dubbo-domain</module>
        <module>order-service</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
        <alibaba-spring-cloud.version>2.2.5.RELEASE</alibaba-spring-cloud.version>
        <mysql.version>5.1.47</mysql.version>
        <mybatis.version>2.1.1</mybatis.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <!--springcloud alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba-spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement> 

</project>

api模块

pom文件

<?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>
    <parent>
        <groupId>com.nsk666</groupId>
        <artifactId>cloud-dubbo-nacos</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-api</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

结构

domain 模块

pom 文件

<?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>
    <parent>
        <groupId>com.nsk666</groupId>
        <artifactId>cloud-dubbo-nacos</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-domain</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

结构

order-service模块

pom文件

<?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>cloud-dubbo-nacos</artifactId>
        <groupId>com.nsk666</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>order-service</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--nacos注册中心的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--springcloud alibaba dubbo依赖   -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.nsk666</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.nsk666</groupId>
            <artifactId>dubbo-domain</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>order-service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

server:
  port: 8085
spring:
#  datasource:
#    url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
#    username: root
#    password: root
#    driver-class-name: com.mysql.jdbc.Driver
  application:
    # 服务名称
    name: order-service
    cloud:
      nacos:
        discovery:
          server-addr: localhost:8848
dubbo:
  registry:
    # 注册协议
    protocol: dubbo
    address: nacos://localhost:8848  #使用cloud的注册中心
  # dubbo 协议
  protocol:
    id: dubbo
    name: dubbo
    # dubbo 协议端口( -1 表示自增端口,从 20880 开始)
    port: -1
  # 服务扫描的基础包
  scan:
    basePackages: com.nsk666
  consumer:
    check: false   #dubbo默认有启动检查
    retries: 0     #dubbo内置的重试机制

结构

orderServiceImpl.java

package com.nsk666.order.service;

import com.nsk666.service.OrderService;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * @author niushuaikui
 * @description TODO
 * @date 2023/5/6
 */
@DubboService
public class OrderServiceImpl implements OrderService {
    @Override
    public String order() {
        return "order";
    }
}

user-service模块

pom文件

<?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>cloud-dubbo-nacos</artifactId>
        <groupId>com.nsk666</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>user-service</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--nacos注册中心的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--springcloud alibaba dubbo依赖   -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!-- SpringCloud Ailibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.nsk666</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.nsk666</groupId>
            <artifactId>dubbo-domain</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>user-service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml

server:
  port: 8083

bootstrap.yml

spring:
  profiles:
    active: dev
  #  datasource:
  #    url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false
  #    username: root
  #    password: root
  #    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      # 读取nacos的配置文件
      config:
        server-addr: localhost:8848
        file-extension: yaml
  # 配置dubbo ,注册中心, 暴露端口和协议,dubbo注解的包扫描
dubbo:
  protocol:
    name: dubbo
    port: 20881
  registry:
    address: nacos://localhost:8848 # 使用nacos的注册中心
  scan:
    base-packages: com.nsk666.user.service

服务类代码

package com.nsk666.user.service;

import com.nsk666.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * @author niushuaikui
 * @description TODO
 * @date 2023/5/6
 */
@DubboService
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello() {
        return "hello,world";
    }
}

控制类代码

package com.nsk666.user.controller;

import com.nsk666.service.OrderService;
import com.nsk666.service.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author niushuaikui
 * @description TODO
 * @date 2023/5/6
 */
//配置发布之后,动态刷新配置
@RefreshScope
@RestController
public class UserController {

    @Autowired
    UserService userService;


    @Value("${user.name}")
    String name;

    @Value("${user.password}")
    String password;
    @DubboReference
    OrderService orderService;

    @GetMapping("/hello")
    public String hello(){
       return userService.sayHello();
    }

    @GetMapping("/order")
    public String order(){
        return orderService.order()+name+password;
    }
}

登录时, 前端调用登录接口,在此使用传入的uuid(调用RedisCache.getCacheObject),检验时调用redis的缓存,验证,验证结束删除此key对应的值

  • 如果验证失败。后端抛出异常,反馈异常信息