1、linux安装zookeeper
https://blog.csdn.net/wealth_123450/article/details/112857642
2、linux安装dubbo管理平台 dubbo-admin
https://blog.csdn.net/wealth_123450/article/details/112858610
3、SpringBoot集成Dubbo整体目录结构
测试用例demo-dubbo(idea创建项目SpringBoot,Packaging选择jar)
接口:demo-member-service
提供者provider1:dubbo-member-service-impl
提供者provider2:dubbo-member-service-impl2
消费者consumer:dubbo-order-web
4、代码编写
4.1 demo-dubbo 父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 https://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.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ayiol</groupId>
<artifactId>demo-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-dubbo</name>
<description>Demo project for Spring Boot</description>
<!-- 统一编写版本控制 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- springboot整合web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--整合swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.2 接口编写
4.2.1 接口项目demo-member-service 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ayiol</groupId>
<artifactId>demo-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.ayiol</groupId>
<artifactId>dubbo-member-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-member-service</name>
<description>Demo project for Spring Boot</description>
</project>
4.2.2 接口类编写
1、新建包路径:api.member
2、创建并编写接口:IMemberService.java
4.3 服务提供者编写
4.3.1 服务提供者 dubbo-member-service-impl 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ayiol</groupId>
<artifactId>demo-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.ayiol</groupId>
<artifactId>dubbo-member-service-impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-member-service-impl</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.ayiol</groupId>
<artifactId>dubbo-member-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
4.3.2 服务提供者 application.yml
##服务器端口号
server:
tomcat:
uri-encoding: UTF-8
port: 8002
dubbo:
application:
name: member
##采用协议方式和端口号
protocol:
id: dubbo
##采用dubbo协议
name: dubbo
##发布dubbo端口号为20880
port: "20882"
registry:
address: zookeeper://192.168.76.131:2181
##通过测试scan不加也是可以的
scan:
##dubbo 实现类扫包范围
base-packages: com.ayiol.api.member.impl
4.3.3 服务提供者实现类编写
1、新建包路径:api.member.impl
2、创建并编写接口实现类:MemberServiceImpl.java
4.3.4 启动类DubboImplApplication.java编写
启动类中设置属性,主要是为了解决dubbo Qos
package com.ayiol;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.qos.common.Constants;
import com.alibaba.dubbo.qos.server.Server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class DubboImplApplication {
public static void main(String[] args) {
//配置dubbo.qos.port端口
System.setProperty(Constants.QOS_PORT, "33333");
//配置dubbo.qos.accept.foreign.ip是否关闭远程连接
System.setProperty(Constants.ACCEPT_FOREIGN_IP, "false");
SpringApplication.run(DubboImplApplication.class, args);
//关闭QOS服务
Server.getInstance().stop();
}
}
在未设置上图Qos参数时,启动多个提供者则抛如下异常:
[DUBBO] qos-server can not bind localhost:22222, dubbo version: 2.6.0, current host: 127.0.0.1
4.4 服务提供者2与其服务提供者1雷同
区别:
1、application.xml中dubbo暴露端口需要设置不同的端口
2、启动类application.java中dubbo.qos需要设置不同的端口
4.5 服务消费者编写
4.5.1、服务消费者 dubbo-order-web 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ayiol</groupId>
<artifactId>demo-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.ayiol</groupId>
<artifactId>dubbo-order-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-order-web</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!-- 引用接口服务 -->
<dependency>
<groupId>com.ayiol</groupId>
<artifactId>dubbo-member-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
4.5.2 服务消费者 application.yml
##服务器端口号
server:
tomcat:
uri-encoding: UTF-8
port: 9001
dubbo:
application:
name: order
registry:
##注册中心地址
address: zookeeper://192.168.76.131:2181
scan:
##dubbo 实现类扫包范围
base-packages: com.ayiol.controller
##调用服务的超时时间:5秒
consumer:
timeout: 5000
##swagger开启/关闭 true/false
swagger:
enable: true
4.5.3 服务消费者controller编写
1、新建包路径:controller
2、新建并编写controller类:OrderController.java
3、启动类DubboOrderWebApplication.java编写
package com.ayiol;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.alibaba.dubbo.qos.common.Constants;
import com.alibaba.dubbo.qos.server.Server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class DubboOrderWebApplication {
public static void main(String[] args) {
//配置dubbo.qos.port端口
System.setProperty(Constants.QOS_PORT, "55555");
//配置dubbo.qos.accept.foreign.ip是否关闭远程连接
System.setProperty(Constants.ACCEPT_FOREIGN_IP, "false");
SpringApplication.run(DubboOrderWebApplication.class, args);
//关闭QOS服务
Server.getInstance().stop();
}
}
5、测试远程服务调用
第4步中代码编写全部完成后,启动提供者provider和消费者consumer,再浏览器中访问:http://localhost:9001/orderToMember
6、在dubbo-admin管理平台查看服务提供者、消费者
到此SpringBoot集成Dubbo+zookeeper初步完成。