关于Dubbo以及zookeeper的介绍和使用教程
Dubbo百度百科
Dubbo(读音[ˈdubəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
背景和用法
背景
随着Internet的快速发展,Web应用程序的规模不断扩大,最后我们发现传统的垂直体系结构(单片式)已无法解决。分布式服务体系结构和流计算体系结构势在必行,迫切需要一个治理系统来确保体系结构的有序发展,就如我们常用来表述的电商,当某一时刻就可能有几万条数据,此时显然一般的单个整体架构就不够了
要求
当服务越来越多的时候,配置服务会变得越来越难,硬件的平衡器的节点压力也会增加,此时就需要使用负载均衡来控制其框架之间的相关之间的关系,流量变得越来越大,服务的内容就会被暴露出来,所以我们需要来做出需要的改变
用法
provider:暴露服务的服务提供方
consumer:调用远程服务的服务消费方
registry:注册服务与发现的注册中心
moniter:统计服务的调用次数和调用服务的监控中心
container:服务运行容器
zookeeper
Zookeeper是apache hadoop的子项目。由于它提供树状目录服务并支持更改通知,因此适合将其用作dubbo的注册表服务器。它是经过现场验证的产品,因此建议在生产环境中使用它
Dubbo使用教程
1.导入相对应的坐标(jar)
<!-- dubbo相关 -->
<!--引入dubbo的依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<!--注册中心是zookeeper,引入操作zookerper的客服端-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
2.配置其相关的注册的信息
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--上面的是配置服务中心到指定的位置-->
<!--1.声明应用名称(同样的服务名字相同,不要和别的名字相同)-->
<dubbo:application name="dubboprovider"/>
<!-- 2.配置注册中心(指定注册中心的位置)-->
<dubbo:registry address="zookeeper://192.168.220.130:2181"/>
<!--3.配置通信的规则<dubbo:protocal name="dubbo" prot="20880">此处省略了 -->
<!--4.暴露服务<dubbo:service interface="" ref="" 这个ref表达的是真正的实现对象-->
<!-- 声明发布到dubbo内容-->
<!--实际上发布的是该包下的带有@Service注解的实现类,框架自动扫描该包下所有子包(声明需要暴露的服务端口)-->
<dubbo:annotation package="com.offcn.service"/>
</beans>
3.分别定义接口和实现类
package com.offcn.service;
/**
*
* @author liugang
* @version 1.0
* @date 2019/11/10
*/
public interface UserService {
String getName();
}
package com.offcn.service.imp;
import com.alibaba.dubbo.config.annotation.Service;
import com.offcn.service.UserService;
/**
* TODO 注意:@Service的包信息,必须引用com.alibaba.dubbo.config.annotation.Service
* @author liugang
* @version 1.0
* @date 2019/11/10
* {@link com.offcn.service.UserService}
* @see <a href="http://dubbo.io/">dubbo</>
*
* 1.让服务提供者 注册 到注册中心(暴露服务)
* 1.1导入dubbo的依赖 操作zookerper的客服端
* 1.2.配置服务提供者
* 2.让服务消费者去注册中心 订阅 服务提供者的服务地址
*/
@Service
public class UserServiceImpl implements UserService {
@Override
public String getName() {
return "中公优就业";
}
}
5.服务者也是这样的玩法,这里就不在多介绍了,这里主要说下服务端也要引用其相关的接口的思想,实现其相互调用的特点
Dubbo运行结果