springboot+dubbo+zookeeper
三层结构:
common
— 公共组件
customer1
— controller
provider1
---子项目service-api
---iservice
---bean
----子项目serviceImp
—impl
—mapper
idea搭建项目架构
1、
file -> new project -> spring initializr (创建springboot主项目)
file -> new module -> maven (创建common maven)
file -> new module -> maven (创建provider maven)
file -> new module -> maven (在provider下创建service maven)
file -> new module -> maven (在provider下创建impl maven)
file -> new module -> maven (创建consumer maven)
2、删除主项目的src文件夹,没什么用
3、标记各maven的java和resource项目
java: mark Directory as Source root
resource: mark Directory as Resources root
4、删除主项目的依赖,给各个maven添加依赖
consumer和provider的impl子项目需要添加如下依赖,并刷新maven,加载依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.0</version>
</dependency>
<!--注册中心-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>apache-curator</artifactId>
<version>2.13.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--接口工程-->
<dependency>
<groupId>springboot.dubbo.zookeeper</groupId>
<artifactId>student-service-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
5、给consumer和provider的impl子项目新建Application,启动类需要添加@SpringBootApplication和@EnableDubbo
package com.cytx.consumer;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6、给consumer添加application.properties文件
#设置内嵌Tomcat端口号
server.port=8082
spring.main.allow-bean-definition-overriding=true
#设置dubbo的配置
dubbo.application.name=consumer-dubbo-consumer
dubbo.consumer.timeout=30000
#设置注册中心
dubbo.registry.address=zookeeper://192.168.1.202:2181
dubbo.scan.base-packages=service
给provider的impl项目添加application.properties文件
#设置内嵌Tomcat端口号
server.port=8081
spring.main.allow-bean-definition-overriding=true
#设置dubbo的配置
dubbo.application.name=provider-dubbo-provider
dubbo.registry.protocol=zookeeper
#设置注册中心
dubbo.registry.address=zookeeper://192.168.1.202:2181
dubbo.provider.actives= 10
#dubbo.provider.server=mserver
dubbo.provider.timeout=30000
dubbo.protocol.name=dubbo
dubbo.protocol.port=20886
dubbo.consumer.check=false
7、服务类要添加@Service注解,切记注解不是用spring的service注解,是 dubbo提供的service注解。@Service 用在服务提供者中。
消费者使用服务时,使用@Reference注解。@Reference 用在消费端,表明使用的是服务端的什么服务。
8、启动zookeeper,zookeeper注册地址是192.168.202:2181,所以在192.168.202服务器要启动zookeeper
9、分别启动消费者和服务提供者的服务
注意:
1、消费方和服务提供方是可以在不同服务器部署的
2、同一个服务在不同服务器上多次部署,都会在注册中心中注册,消费方调用服务提供方接口时会按照某个规则调用
3、如何查看服务提供方或消费方已经在zk中注册了呢?
./bin/zkCli.sh 开启zk客户端
ls /dubbo可以看到注册的服务,ls /dubbo/注册的服务/providers 可以看到注册的服务提供方,如果没有,说明没有注册该服务,如果有则只是说明有注册过该服务。ls /dubbo/注册的服务/consumers 可以看到注册的服务消费方。如果有,说明服务已经注册。
网友评论