这两天在学习dubbo,想使用SpringCloudAlibaba的成员nacos作为配置中心,但是网上搜索的资源都是特别老特别老的,踩坑无数之后,终于整合成功,为了让大家少走弯路,我特意贴出来跟大家分享一下。文章最后,我会贴出自己的项目地址,大家可以作为参考。
nacos安装
- 下载最新稳定版,传送门
- 解压,然后直接进行单机版启动即可
unzip nacos-server-1.0.0.zip
cd nacos/bin
sh startup.sh -m standalone
浏览器访问localhost:8848/nacos
用户名和密码都是nacos
项目框架结构
主模块下主要分为4个模块,分别是
- API接口部分,主要写对外提供的接口使用
- common 部分,常用的工具类,常量等
- order 部分,订单模块,既是消费者也是生产者
- store 部分,库存模块,既是消费者也是生产者
SpringBoot 整合Dubbo
- 父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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>org.yuwb</groupId>
<artifactId>micro-service-all</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>micro-service-order</module>
<module>micro-service-store</module>
<module>micro-service-api</module>
<module>micro-service-common</module>
</modules>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dubbo.version>2.7.3</dubbo.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Apache Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
</project>
-
编写api接口
public interface SayHello {
/**
* say hello
*
* @param name name
* @return String
*/
String sayHello(String name);
}
这个模块只是为了提供对外的API接口,理论上不需要任何jar包。
- 生产者
这里使用store模块作为生产者
- 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">
<parent>
<groupId>org.yuwb</groupId>
<artifactId>micro-service-all</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>micro-service-order</artifactId>
<name>micro-service-order</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.yuwb</groupId>
<artifactId>micro-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
-
编写生产者实现类
新建provider包
@Service(version = "1.0.0")
public class SayHelloProvider implements SayHello {
@Override
public String sayHello(String name) {
return name + ",hello";
}
}
这里值得注意的是@Service
注解使用的是dubbo的即org.apache.dubbo.config.annotation.Service
- 修改appication.yml文件增加dubbo配置
dubbo:
scan:
base-packages: org.yuwb.provider
protocol:
name: dubbo
port: 12345
registry:
address: nacos://192.168.174.134:8848
这里dubbo的生产者就编写好了。
- 消费者
- 消费者的依赖和生产者一摸一样,不需要任何变动,直接复制即可。
- 配置文件中加入如下配置:
dubbo:
registry:
address: nacos://192.168.174.134:8848
- 编写消费者
@Slf4j
@Compoment
public class SayHelloController {
@Reference(version = "1.0.0")
private SayHello sayHello;
@Bean
public ApplicationRunner runner() {
return args -> log.info(sayHello.sayHello("dubbo"));
}
}
然后依次启动生产者和消费者
访问nacos
整合mybatisPlus
- 在pom中添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
- 配置文件中增加mysql,mybatisPlus相关配置
spring:
application:
name: micro-service-order
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/test?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
mybatis-plus:
mapper-locations: mapper/*.xml
type-aliases-package: org.yuwb.model
configuration:
map-underscore-to-camel-case: true
global-config:
db-config:
table-underline: true
logic-not-delete-value: 0
logic-delete-value: 1
Test
-
先启动provider然后启动consumer
通过日志可以看出,消费者已经成功消费。
-
查看nacos控制台
项目地址:
参考文档: