dubbo(分布式架构)+zookeeper(注册中心)+spring(provider和consumer) 基本使用

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();

}

package com.dubbo.provider.service;


import java.util.ArrayList;
import java.util.List;


import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.provider.bean.User;

//注解方式
//@Service(interfaceClass = DemoService.class, version = "1.0.0")
public class DemoServiceImpl implements DemoService {


public String sayHello(String id) {
// TODO Auto-generated method stub
System.out.println("调用sayHell成功...");
return "hello:" + id;
}


public List getUsers() {
System.out.println("调用getUsers成功...");
List list = new ArrayList();
list.add(new User("jianglong", 28, "nan"));
list.add(new User("tianqq", 25, "nv"));
return list;
}


}

  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秒左右屡试不爽 目前为止还没有找到原因 若有知道的同仁 请多多请教和指正

你可能感兴趣的:(dubbo(分布式架构)+zookeeper(注册中心)+spring(provider和consumer) 基本使用)