1.前言
看到网上各种dubbo的教程,应该基本上都是从一个地方贴过来的,一看到千篇一律的provider中main方法中的system.in.read()就头疼了,随便找找都是一个样,估计都没自己认真写过吧!工作之余,今天就写一个基于tomcat容器的provider、基于zookeeper单节点注册中心来玩玩儿。
2.准备工作
1>由于项目都是在maven下构建的,请先安装maven、开发工具eclipse以及maven插件
2>由于注册中心、监控中心、provider以及consumer都部署到不同的服务器,请先安装virtualbox,用虚拟机安装一个Linux系统,centos mini即可
3>虚拟机安装的centos我将其ip配置为静态,且与我本机位同一网段, 保证本机与虚拟机centos之间可以相互访问.
4>下载zookeeper的tar包导centos并解压到/usr/local/program/zookeeper
5>下载jdk7的tar包导centos并解压到/usr/local/program/jdk
6>下载dubbo建议监控中心的zip包并解压到本机E:\software\dobbo\monitor
3.配置
1>配置jdk
2>配置zookeeper 进入zookeeper的bin目录下 ./zkServer.sh start 运行上述命令 以默认配置开启zookeeper服务即可
3>配置监控中心 进入monitor的conf目录 编辑dubbo配置文件 配置注册中心信息dubbo.registry.address=zookeeper://10.4.2.254:2181 修改jetty的端口为8081保存 进入bin目录 点击start即可启动 由于是弄着玩儿的 直接将centos的防火墙关闭即可 省的配置端口开发 service iptables stop运行这条命令即可
4>浏览器中访问http://localhost:8081即可看到监控中心界面 点击services即可看到一个provider 就是监控中心本身的信息 后续开发provider启动之后会在这里看到provider的信息
4.开发
1>配置maven、安装eclipse以及maven插件
2>新建一个maven(webapp)工程 配置如下
1>provider.xml配置
2>web.xml配置
dubbo-webservice
contextConfigLocation
classpath:provider.xml
org.springframework.web.context.ContextLoaderListener
dubbo
com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
1
dubbo
/*
index.html
4>pom.xml配置
4.0.0
demo-provider
demo-provider
war
0.0.1-SNAPSHOT
demo-provider Maven Webapp
http://maven.apache.org
4.1.7.RELEASE
3.1.1
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-expression
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
com.alibaba
dubbo
2.5.3
org.javassist
javassist
3.18.1-GA
org.jboss.netty
netty
3.2.9.Final
com.101tec
zkclient
0.4
org.apache.zookeeper
zookeeper
3.4.6
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.12
org.slf4j
slf4j-log4j12
1.7.12
org.jboss.netty
netty
3.2.10.Final
demo-provider
3>代码以及结构
1>包结构
com.dubbo.provider
------bean
----------------Users
------service
----------------DemoService
----------------DemoServiceImpl
2>代码
package com.dubbo.provider.bean;
public class User {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
}
package com.dubbo.provider.service;
import java.util.List;
import com.dubbo.provider.bean.User;
public interface DemoService {
public String sayHello(String name);
public List getUsers();
}
3>新建一个普通的maven工程 demo-consumer
1>consumer.xml配置如下
2>pom.xml与provider相同
3>将provider打成jar包导入到consumer以备调用
4>写一个main方法调用dubboprovider的接口 代码如下
package com.dubbo.consumer.boot;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dubbo.provider.service.DemoService;
public class Boot {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
context.start();
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
DemoService demoService=(DemoService) context.getBean("demoService");
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
System.out.println(demoService.sayHello("jianglong"));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
最后将privider用tomcat容器启动,在监控中心即可看到新添加了一条provider的信息 说明provider在注册中心注册成功。此时运行consumer的main方法 即可看到控制台有成功调用的提示 调用成功 简单的使用方式就成功了
遇到的问题:可以看到
DemoService demoService=(DemoService) context.getBean("demoService");这句代码耗时有5秒左右 目前还没查出耗时这么久的原因来 后来我将provider zookeeper consumer以及monitor都放到本机来测试 耗时依然是5秒左右屡试不爽 目前为止还没有找到原因 若有知道的同仁 请多多请教和指正