概要
虽然将这一步定义为了 step 1,但实际上还有一些前置工作未作说明(基本环境-电脑上有了懒得折腾),主要是安装java、maven、git,以及注册github,新建仓库,安装nacos,包括idea的一些基本设置。
补充:github地址:https://github.com/Pudgezhen/keys_to_iot
正题
先简单看下项目结构哈
- 简单介绍:
keys_to_iot
作为整个项目,无需介绍
iot
作为父工程,主要是 对整个项目依赖版本的一个管控
api
作为父工程下的一个模块,主要是 提供 公用的接口和pojo的作用
device
作为父工程下的一个模块,在此demo中作为服务消费者
user
作为父工程下的一个模块,在此demo中作为服务生产者
pom文件参考:
iot
父工程
<?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>
<properties>
<dubbo.version>3.1.11</dubbo.version>
</properties>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>user</module>
<module>device</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.12</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.keys</groupId>
<artifactId>iot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>iot</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- dubbo-starter 版本控制-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--dubbo-nacos 注册中心-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
api
<?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">
<parent>
<artifactId>iot</artifactId>
<groupId>com.keys</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<artifactId>api</artifactId>
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
device
<?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">
<parent>
<artifactId>iot</artifactId>
<groupId>com.keys</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>device</artifactId>
<dependencies>
<dependency>
<groupId>com.keys</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
user
<?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">
<parent>
<artifactId>iot</artifactId>
<groupId>com.keys</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>user</artifactId>
<dependencies>
<dependency>
<groupId>com.keys</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
yml 配置文件参考
device
server:
port: 9001 #项目端口号
dubbo:
application:
name: device #注册中心name
protocol:
name: dubbo #协议
port: -1 #系统自动选择的端口
registry: # 注册中心
address: nacos://127.0.0.1:8848 # 注册中心地址
username: nacos
password: nacos
user
server:
port: 9002
dubbo:
application:
name: user #注册中心name
protocol:
name: dubbo #协议
port: -1 #系统自动选择的端口
registry: # 注册中心
address: nacos://127.0.0.1:8848 # 注册中心地址
username: nacos
password: nacos
程序代码
- 这个就不截图了,就是一个简单的测试案例,也没多少代码,大致说一下思路
api
工程
提供一个interface,由服务提供者实现具体逻辑,服务消费者来调用
user
服务提供者
- SpringBoot启动类加 @EnableDubbo注解
- 创建一个class实现 api工程提供的接口,并在类上添加 @DubboService 注解
device
服务消费者
直接使用 @DubboReference 取代 @Autowired 将bean注入即可使用
然后,直接启动两个工程就可以了(可以在device
写一个controller测试哈)。
还有就是 dubbo默认是有启动检查的,所以需要先启动服务提供者,再启动消费者。
有时间在单独整理一份dubbo的学习吧。