一、dubbo例子1(简单示例)
二、dubbo例子2(检查依赖)
三、dubbo集群容错
四、负载均衡策略
五、线程模型
六、直连提供者
七、多注册中心
八、多版本
九、异步调用
十、结果缓存
十一、并发控制
十二、令牌验证
十三、路由规则(某些机房提供服务,有些不提供服务)
一、dubbo例子1(简单示例)
由于Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。(官网示例:http://dubbo.apache.org/zh-cn/docs/user/preface/usage.html)
我这里举个例子,例子demo下载(提取码:s08v)
结构如下
主要关注SampleServiceImpl和SampleService
代码如下
SampleService.java(服务接口类)
package xjd.dubbo.sample.provider;
import java.util.List;
public interface SampleService {
String sayHello(String name);
public List getUsers();
}
SampleServiceImpl.java(服务接口实现类)
package xjd.dubbo.sample.provider.impl;
import java.util.ArrayList;
import java.util.List;
import xjd.dubbo.sample.provider.SampleService;
public class SampleServiceImpl implements SampleService {
public String sayHello(String name) {
return "Hello " + name;
}
public List getUsers() {
List list = new ArrayList();
User u1 = new User();
u1.setName("jack");
u1.setAge(20);
u1.setSex("m");
User u2 = new User();
u2.setName("tom");
u2.setAge(21);
u2.setSex("m");
User u3 = new User();
u3.setName("rose");
u3.setAge(19);
u3.setSex("w");
list.add(u1);
list.add(u2);
list.add(u3);
return list;
}
}
现在我想把服务对外暴露,那么我们就要使用dubbo了。由于dubbo与spring紧密结合,我们查看sample-provider.xml。配置如下
<?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: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
">
<!-- 具体的实现bean -->
<bean id="sampleService" class="xjd.dubbo.sample.provider.impl.SampleServiceImpl" />
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="sample-provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<!-- <dubbo:registry address="zookeeper://192.168.1.111:2181?backup=192.168.1.112:2181,192.168.1.113:2181" /> -->
<dubbo:registry address="zookeeper://IP:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 写操作可以设置retries=0 避免重复调用SOA服务 -->
<dubbo:service retries="0" interface="xjd.dubbo.sample.provider.SampleService" ref="sampleService" />
</beans>
一般在工作中,会把这个2个类达成一个jar包发布到linux上。
这里我为了节省时间,我用一个main方法直接启动
代码如下
Provider.java
package xjd.dubbo.sample.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "sample-provider.xml" });
context.start();
System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
}
}
以上是Provider端。下面我们看consumer端。同样的consumer也有一个SampleService.java这个类于Provider端的SampleService.java是一模一样的。也就是说,consumer端要用到Provider端的接口也需要有,这样消费端才能使用Provider端的接口。
consum