SpringBoot+ZooKeeper+Dubbo实战
- 前言
- 1. ZooKeeper简介
- 2. Dubbo-admin简介
- 3. SpringBoot集成
- 3.1 Provider
- 3.2 Customer
- 3.3 测试结果
- 4. 总结
前言
周末总结了一下SpringBoot项目集成ZooKeeper以及Dubbo,记录一下学习过程。
1. ZooKeeper简介
ZooKeeper: A Distributed Coordination Service for Distributed Applications
ZooKeeper 是一个开源的分布式协调服务。
Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。
ZooKeeper的安装在此不做过多的描述。安装完后的目录如下:
可以通过bin目录下的zkServer.sh文件启动ZooKeeper。启动命令如下:
./zkServer.sh start &
查看ZooKeeper的运行状态:
./zkServer.sh status
运行结果如下:
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
出现上面的界面,代表ZooKeeper 启动成功。
2. Dubbo-admin简介
Dubbo-admin是一个可以通过web查看dubbo的管理控制台。
我们可以从网上把Dobbo-admin的war包下载下来,然后放到服务器的Tomcat目录webapps中,启动Tomcat即可运行Dobbo-admin。关于Tomcat的启动,大家可以搜一下,网上资料很多,在此不做详细描述。
这里分享一个dobbo-admin的war包下载地址,网上找了很多都没有下载到。
链接:dubbo-admin ,提取码: 6a3h
启动后的界面如下:
3. SpringBoot集成
这里通过两个项目来演示。一端为Provider、另一端为Customer。因工程为商业项目,文章中只贴出部分代码。
3.1 Provider
在SpringBoot项目中集成Dubbo+ZooKeeper框架
首先pom.xml 文件中添加依赖。
<!--引入springboot整合dubbo的jar包-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
其次,在Application上添加注解@EnableDubbo。
@SpringBootApplication()
@ServletComponentScan
@EnableDubbo
@ComponentScan(basePackages = {"com.ctpia"})
public class V1Application {
public static void main(String[] args) {
SpringApplication.run(V1Application.class, args);
}
@Bean({"threadPoolTaskExecutor", "webMvcAsyncTaskExecutor"})
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
return new ThreadPoolTaskExecutor();
}
}
新建业务逻辑接口CreateService
public interface CreateService {
int query(String mobile);
}
新建业务逻辑实现类 CreateServiceImpl
import com.alibaba.dubbo.config.annotation.Service;
import com.ctpia.qgw.v1.service.CreateService;
import org.springframework.web.bind.annotation.ResponseBody;
@Service
public class CreateServiceImpl implements CreateService {
@ResponseBody
@Override
public int query(String mobile) {
return 100;
}
}
这里的@Service注解一定是com.alibaba.dubbo.config.annotation.Service这个包下的。
application.yml中添加配置
dubbo:
application:
name: dubbo-provider
protocol:
name: dubbo
port: 20880
registry:
address: zookeeper://(服务器IP地址):2181
启动SpringBoot项目,我们可以看到日志:
3.2 Customer
pom.xml中添加依赖。
<!--引入springboot整合dubbo的jar包-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
Application启动类添加注解@EnableDubbo
@EnableDubbo
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
application.yml 中添加配置
dubbo:
application:
name: dubbo-customer
registry:
address: zookeeper://(服务器IP):2181
控制器ServerController的代码如下:
import com.alibaba.dubbo.config.annotation.Reference;
import com.ctpia.qgw.v1.service.CreateService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/v1")
public class ServerController {
@Reference
CreateService searchService;
@RequestMapping(value = "/query", method = RequestMethod.GET)
public String query() {
return searchService.query("1111") + "";
}
}
CreateService记住要使用注解Reference引用。CreateService的代码如下:
public interface CreateService {
int query(String mobile);
}
项目的目录结构如下图所示:
启动SpringBoot 项目,可以看到连接成功的信息如下图所示。
3.3 测试结果
浏览器输入http://localhost:8081/v1/query,看到返回结果。
通过Dubbo-admin我们可以看到我们注册的服务,如下图所示。
4. 总结
当看到一个新的知识点的时候,希望大家可以动手去实践一下,真正自己操作的时候,可能会遇到各种错,解决错误才是我们学习中收货最大的。大家有不明白的可以留言。
最后:不卑不亢,一起努力。@qianhui