dubbo-api + zookeeper分布式配置方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ren365880/article/details/88557458

先看下Dubbo和zookeeper的定义:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo和zookeeper同属apache软件基金会下的项目,虽然阿里内部Dubbo并没有使用zookeeper注册中心,但是目前很大一部分开发者都使用Dubbo+zookeeper(我感觉很多人,哈哈),虽然Dubbo与spring 配置文件搞起来方便,但是dubbo API配置方式也有存在的必要,毕竟不是100%的人都在用spring。

1.搭建zookeeper注册中心:

zookeeper注册中心搭建很简单(我是在本机window上搭建的),首先在:https://www.apache.org/dyn/closer.cgi/zookeeper/ 镜像下载需要的程序,解压后修改zoo_sample.cfg 文件名(D:\software\work\zookeeper\conf) 为 zoo.cfg
更改配置文件里面的日志目录,如下:
dataDir=D:\zookeeper\data
dataLogDir=D:\zookeeper\log
进入到bin目录,并且启动zkServer.cmd,启动成功后zookeeper注册中心就算搭建完毕。

2.Dubbo maven(服务提供质和消费者都要依赖):

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.22</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.22</version>
        </dependency>

3.服务提供者主要代码:

public static void main(String[] args) {
        UndertowServer.start(DemoConfig.class, 8081, true);
        if(!running.get()){
            // 服务实现
            TestService testService = new TestServiceImpl();
 
            // 当前应用配置
            ApplicationConfig application = new ApplicationConfig();
            application.setName("dubbo-api-test");
 
                // 连接注册中心配置
            RegistryConfig registry = new RegistryConfig();
            registry.setProtocol("zookeeper");
            registry.setAddress("127.0.0.1:2181");
 
                // 服务提供者协议配置
            ProtocolConfig protocol = new ProtocolConfig();
            protocol.setName("dubbo");
                protocol.setPort(12345);
                protocol.setThreads(100);
 
                // 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口
            // 服务提供者暴露服务配置
            ServiceConfig<TestService> service = new ServiceConfig<TestService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
            service.setApplication(application);
            service.setRegistry(registry); // 多个注册中心可以用setRegistries()
            service.setProtocol(protocol); // 多个协议可以用setProtocols()
            service.setInterface(TestService.class);
            service.setRef(testService);
            service.setVersion("1.0.0");
            // 暴露及注册服务
            service.export();
            running.set(true);
        }
        LogUtil.printList(new ArrayList<Object>());
        
    }

4.服务消费者主要代码:

public static void main(String[] args) {
        UndertowServer.start(DemoConfig.class, 8082, true);
        //当前应用配置
  		ApplicationConfig application = new ApplicationConfig();
  		application.setName("TestServiceUser");
  		
  		//连接注册中心配置
  		RegistryConfig registry = new RegistryConfig();
  		registry.setAddress("zookeeper://127.0.0.1:2181");
  		
  		//注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接
  		 
  		//引用远程服务
  		ReferenceConfig<TestService> reference = new ReferenceConfig<TestService>();
  		reference.setApplication(application);
  		reference.setRegistry(registry);
  		reference.setInterface(TestService.class);
  		reference.setVersion("1.0.0");
  		
  		//和本地Bean一样使用Service
  		TestService sortService = reference.get(); // 获取远程服务代理
          int [] arrays = {234,1,45,22,123};
          System.out.println("排序前:");
          for (int i = 0; i < arrays.length; i++) {
  			System.out.println("arrays["+i+"]="+arrays[i]);
  		}
          arrays = sortService.ascendingSort(arrays); // 执行远程方法
   
          //显示调用结果
          System.out.println("排序后:");
          for (int i = 0; i < arrays.length; i++) {
  			System.out.println("arrays["+i+"]="+arrays[i]);
          }

5.实现接口:

public interface TestService {
	//升序排序
	int[] ascendingSort(int[] arrays);
}

@Service(version="1.0.0")
public class TestServiceImpl implements TestService{

	public int[] ascendingSort(int[] arrays) {
		int temp=0;
		//冒泡升序排序
		for (int i = 0; i < arrays.length-1; i++) {
			for (int j = i+1; j < arrays.length; j++) {
				if(arrays[i]>arrays[j]){
					temp=arrays[i];
					arrays[i]=arrays[j];
					arrays[j]=temp;
				}
			}
		}
		return arrays;
	}

}

6. dubbo-admin

dubbo-admin已近分开成子项目,在dubbo下载页面即可找到

猜你喜欢

转载自blog.csdn.net/ren365880/article/details/88557458