使用zookeeper作为注册中心,版本为3.4.8
一、zookeeper安装步骤
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
tar -zxvf zookeeper-3.4.8.tar.gz
cd zookeeper-3.4.8
cd conf
mv zoo_sample.cfg zoo.cfg
cd ../bin
./zkServer.sh start
二、开发privider端菜示例
1、在pom.xml中增加以下配置
<dependency>
<groupId>dangdangdotcom</groupId>
<artifactId>dubbox</artifactId>
<version>2.8.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/dubbo-2.8.4.jar</systemPath>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.19.0-GA</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
<version>3.10.5.Final</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
2、dubbo provider的spring配置:
<dubbo:application name="demo-provider" owner="dev1" organization="kk"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<bean id="orderService" class="com.kayakwise.dubbo.demo.service.impl.OrderServiceImpl" />
<dubbo:service interface="com.kayakwise.dubbo.demo.service.OrderService" ref="orderService"/>
3、Order类
public class Order implements Serializable {
private long id;
private String customerName;
private String phone;
private String address;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
4、OrderServicer接口
public interface OrderService {
Order getOrderById(long id);
}
public class OrderServiceImpl implements OrderService {
public Order getOrderById(long id) {
Order order = new Order();
order.setId(id);
order.setAddress("淮海路12号");
order.setCustomerName("刘小强test");
order.setPhone("18699999999");
return order;
}
}
三、 开发consumer端示例
1、pom.xml 配置和 provider 端相同。 将provider 里的 OrderService 接口和 Order 类打成包,放到 consumer 工程里。
dubbo consumer的spring配置:
<dubbo:application name="demo-consumer" owner="dev2" organization="kk"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:reference id="orderService" interface="com.kayakwise.dubbo.demo.service.OrderService" check="false" />
然后就可以像使用普通spring bean那样调用orderService了
四、常见问题
1.、超时设置
默认的超时为1秒,可通过timeout参数进行修改,单位为毫秒,示例:
<dubbo:reference id="orderService"interface="com.kayakwise.dubbo.demo.service.OrderService" timeout="3000">
2.、重试设置
默认的重试次数为2,对于涉及到数据修改的服务,建议设置重试次数为0,示例:
<dubbo:reference id="bidderService"interface="com.kayakwise.dubbo.demo.service.BidService" retries="0"/>
3.、spring controller注入的dubbo服务的bean,在运行时报空指针异常
在dubbo的spring配置文件中增加dubbo:annotation 配置,package改为实际的包名。
<dubbo:annotation package="com.kayakwise.dubbo.demo.controller"/>