cloud-dubbo-nacos 简单整合
登录
1.前端执行登录,是放在 vuex.user.js中执行登录操作,并记录相关信息,缓存相关信息
后端登录:
spring-cloud dubbo微服务 使用nacos为注册中心,整合
================================================
项目架构
下载nacos 服务端
配置启动nacos服务 启动服务
内容
-
服务模块使用 api模块的接口,定义实体类
-
order服务模块和user服务模块使用api模块的接口实现服务,使用domain模块的实体类
-
order服务模块和user服务模块注册到nacos注册中心,user模块通过注册中心调用order模块服务
-
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对应的值
- 如果验证失败。后端抛出异常,反馈异常信息