1.搭建好zookeeper集群平台
前边转载文章已有,不再赘述
2.什么是dubbo
dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,高性能和透明化的RPC远程服务调用方案,完美实现服务的输出和输入功能,可以和Spring框架无缝集成
Provider:服务提供方
Consumer:服务消费者
Registry:注册中心
Monitor:统计服务调用次数和调用时间的监控中心
调用流程
a.启动服务提供者。
b.服务提供者在启动时,向注册中心(zookeeper)注册自己提供的服务。
c.服务消费者在启动时,向注册中心订阅自己所需的服务。
d.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
e.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
f.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
3. 服务提供者
创建dubbo的maven工程
pom文档部分:
<!--dubbo start-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
<!--dubbo end-->
spring部分配置:
<!-- 扫描所有bean -->
<context:component-scan base-package="com.wuzl.dubbo.**"/>
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="xs_provider"/>
<!-- 使用zk注册中心暴露服务地址 即zk的所在服务器ip地址和端口号 -->
<dubbo:registry protocol="zookeeper"
address="192.168.100.66:2181,192.168.100.69:2181,192.168.100.77:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 关闭提供者的检索 -->
<dubbo:consumer check="false"></dubbo:consumer>
<dubbo:annotation package="com.wuzl.dubbo"/>
<dubbo:provider delay="-1" timeout="60000" retries="0"></dubbo:provider>
服务代码:
@Service
public class DemoServiceImpl implements DemoService{
@Override
public String hello(String inputStr) {
String result = "hello,"+inputStr;
return result;
}
}
4.服务消费者
同样创建客户端maven工程
pom文件部分内容:
<!--dubbo start-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
<!--dubbo end-->
spring配置:
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="hjy_consumer" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.100.69:2181" />
<dubbo:annotation package="com.wuzl.dubboClient"/>
<dubbo:provider delay="-1" timeout="60000" retries="0"></dubbo:provider>
<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService 包路径要和服务提供者一致-->
<dubbo:reference id="demoService"
interface="com.wuzl.dubbo.provider.service.DemoService" />
消费者代码:
public class DubboClient {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "config/applicationContext.xml" });
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String result = "";
for(int i=0;i<20;i++){
result = demoService.hello("哈哈_"+i);
System.out.println("result:"+result);
}
}
}
消费者可以调用zk注册中心的任一地址,zookeeper自动分配转发具体的服务提供者处理消费者的请求
5.dubbo-admin搭建
下载地址:
https://itmayun.ctfile.com/fs/3011962-230676583
下载后把war包放入tomcat的webapps目录下,启动tomcat
浏览器输入:http://localhost:8080/dubbo-admin/
默认账号: root 密码:root