本文记录了博主在Win10下搭建springboot2.2.1+dubbo2.7.4.1+zookeeper3.5.6的全过程,旨在帮助开发者快速搭建最新版的springboot+dubbo项目,文末附有本文demo项目源码,方便开发者快速投入开发。
dubbo原理不在累赘,请移步至此。 dubbo基本概念
安装Zookeeper
1. 下载bin结尾的tar
2. 解压文件,在根目录下打开conf文件夹,复制zoo_sample.log为zoo.log
3. 启动Zookeeper
2.1 打开 /根目录/bin
2.2 运行 zkServer.cmd
3. 常见错误:
3.1 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
带有bin名称的包才是我们需要的变异后的二进制包,下载时选择-bin结尾的包即可。
参考这篇博客
3.2 运行zkServer.cmd闪退,无任何错误信息
Windows下Zookeeper启动zkServer.cmd闪退问题的解决方案
在zkServer.cmd倒数第二行加入
pause
如图所示:
3.3 JAVA_HOME is incorrectly set
错误信息如图所示:
查看bin文件夹的几个.cmd文件,博主发现zkEnv.cmd有关于JAVA_HOME的检测,如图所示:
打开cmd,输入以下命令,查看JAVA_HOME
set
正确的JAVA_HOME配置应如图所示
win10配置JAVA_HOME环境变量
安装Dubbo
安装
1. 使用git clone源码
git clone https://github.com/apache/dubbo-admin.git
cd dubbo-admin
mvn clean package
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar
或者在github apache/dubbo-admin下载源码编译
在根目录打开cmd,输入指令:
mvn -s "C:\Users\developer\.m2\setting_aliyun.xml" -DskipTests clean package
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar
查看Dubbo Admin
http://localhost:8080
博主将端口修改为8081 修改端口。运行效果如图:
无元数据信息,请升级至Dubbo2.7及以上版本,或者查看application.properties中关于config center的配置,详见这里
应用名
global
配置内容
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
SpringBoot整合dubbo示例
一、创建父项目
<?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.1.RELEASE</version>
<relativePath/>
</parent>
<groupId>per.vastzhang</groupId>
<artifactId>springboot_dubbo_demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>api</module>
<module>provider</module>
<module>consumer</module>
</modules>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、定义API(API模块)
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot_dubbo_demo</artifactId>
<groupId>per.vastzhang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 定义api
public interface TestService {
String sayHello();
String getName(String name);
}
3.springboot启动类
@SpringBootApplication
public class DubboApiApplication {
public static void main(String[] args) {
SpringApplication.run(DubboApiApplication.class, args);
}
}
二、服务提供者(provider模块)
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot_dubbo_demo</artifactId>
<groupId>per.vastzhang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provider</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo 2.7.x引入-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
<dependency>
<groupId>per.vastzhang</groupId>
<artifactId>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>
2. 实现API接口
@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
@Override
public String sayHello() {
return "Hello Dubbo!";
}
@Override
public String getName(String name) {
return name;
}
}
3. springboot配置文件 - application.properties
# Spring boot application
spring.application.name=springboot-dubbo-provider-demo
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.demo.dubbo_provider.impl
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8083
#如果有Can't assign address异常需要加vm参数:
#-Djava.net.preferIPv4Stack=true
4.springboot启动类
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
三、服务消费者(consumer模块)
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springboot_dubbo_demo</artifactId>
<groupId>per.vastzhang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer</artifactId>
<dependencies>
<dependency>
<groupId>per.vastzhang</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo 2.7.x引入-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. 实现controller
@RestController
public class TestDubboController {
@Reference(version = "1.0.0")
private TestService service;
@GetMapping("sayHello")
public String sayHello() {
return service.sayHello();
}
@GetMapping("getName")
public String getName(@RequestParam("name") String name) {
return service.getName(name);
}
}
3. springboot配置文件 - application.properties
spring.application.name=dubbo-consumer-demo
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8082
#如果有Can't assign address异常需要加vm参数:
#-Djava.net.preferIPv4Stack=true
4.springboot启动类
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
测试效果
访问dubbo管理后台
http://127.0.0.1:8081/
测试provider
http://127.0.0.1:8082/sayHello
http://127.0.0.1:8082/getName?name=MyName
github演示demo源码下载
来源:CSDN
作者:Vastzhang97
链接:https://blog.csdn.net/weixin_36294955/article/details/103496410