博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)...
阅读量:6873 次
发布时间:2019-06-26

本文共 5174 字,大约阅读时间需要 17 分钟。

Dubbo与Zookeeper、Spring整合使用

 

Dubbo採用全Spring配置方式,透明化接入应用。相应用没有不论什么API侵入,仅仅需用Spring载入Dubbo的配置就可以,Dubbo基于Spring的Schema扩展进行载入。

 

一:单机模式安装zookeeper

 

1,下载zookeeper注冊中心,下载地址: 下载后解压就可以。进入E:\zookeeper-3.3.6\zookeeper-3.3.6\bin。

双击zkServer.cmd启动注冊中心服务。

zkServer.sh【Linux】或zkServer.cmd【Windows】

 

2,在你执行启动脚本之前,还有几个主要的配置项须要配置一下,Zookeeper的配置文件在 conf 文件夹下。这个文件夹下有 zoo_sample.cfg 和 log4j.properties,你须要做的就是将zoo_sample.cfg 改名为 zoo.cfg,由于 Zookeeper在启动时会找这个文件作为默认配置文件。

以下具体介绍一下。这个配置文件里各个配置项的意义。

 

   •tickTime:这个时间是作为Zookeeper server之间或client与server之间维持心跳的时间间隔,也就是每一个 tickTime 时间就会发送一个心跳。

   •dataDir:顾名思义就是 Zookeeper保存数据的文件夹,默认情况下,Zookeeper 将写数据的日志文件也保存在这个文件夹里。

   •dataLogDir:顾名思义就是Zookeeper 保存日志文件的文件夹

   •clientPort:这个端口就是client连接Zookeeper server的端口,Zookeeper 会监听这个端口,接受client的訪问请求

 

配置好后。zookeeper会监听本机的2181端口。

当这些配置项配置好后,你如今就能够启动 Zookeeper 了,启动后要检查 Zookeeper 是否已经在服务,能够通过 netstat – ano 命令查看是否有你配置的 clientPort 端口号在监听服务。

 

二:服务提供者

 

定义服务接口:(该接口需单独打包,在服务提供方和消费方共享)

package com.unj.dubbotest.provider;import java.util.List;public interface DemoService {	String sayHello(String name);	public List getUsers();}

在服务提供方实现接口:(对服务消费方隐藏实现)

package com.unj.dubbotest.provider.impl;import java.util.ArrayList;import java.util.List;import com.unj.dubbotest.provider.DemoService;public class DemoServiceImpl implements DemoService {	public String sayHello(String name) {		return "Hello " + name;	}	public List getUsers() {		List list = new ArrayList();		User u1 = new User();		u1.setName("hejingyuan");		u1.setAge(20);		u1.setSex("f");		User u2 = new User();		u2.setName("xvshu");		u2.setAge(21);		u2.setSex("m");				list.add(u1);		list.add(u2);				return list;	}}

用Spring配置声明暴露服务:

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="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" /> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="xs_provider" /> <!-- 使用multicast广播注冊中心暴露服务地址 --> <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> --> <!-- 使用zookeeper注冊中心暴露服务地址 --即zookeeper的所在serverip地址和端口号 --> <dubbo:registry address="zookeeper://192.168.24.213:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明须要暴露的服务接口 --> <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" /> </beans>

载入Spring配置。启动服务(或者将项目建为web项目。然后在web.xml中配置好spring的启动,然后扔到tomcat中就可以提供服务):

package com.unj.dubbotest.provider.impl;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {	public static void main(String[] args) throws Exception {		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(				new String[] { "applicationContext.xml" });		context.start();		System.in.read(); // 为保证服务一直开着。利用输入流的堵塞来模拟	}}

三:服务消费者

 

通过Spring配置引用远程服务:

> <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 "> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="hjy_consumer" /> <!-- 使用zookeeper注冊中心暴露服务地址 --> <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <dubbo:registry address="zookeeper://192.168.24.213:2181" /> <!-- 生成远程服务代理,能够像使用本地bean一样使用demoService --> <dubbo:reference id="demoService" interface="com.unj.dubbotest.provider.DemoService" /> </beans>

调用服务測试:

package com.alibaba.dubbo.demo.pp;import java.util.List;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.unj.dubbotest.provider.DemoService;public class Consumer {	public static void main(String[] args) throws Exception {		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(				new String[] { "applicationContext.xml" });		context.start();		DemoService demoService = (DemoService) context.getBean("demoService");		String hello = demoService.sayHello("hejingyuan");		System.out.println(hello);		List list = demoService.getUsers();		if (list != null && list.size() > 0) {			for (int i = 0; i < list.size(); i++) {				System.out.println(list.get(i));			}		}		System.in.read();	}}

測试结果:

附:Dubbo的管理页面

 

须要下载:dubbo-admin-2.5.3的war

下载地址:

 

操作例如以下:

1。替换掉tomcat/webapps下自带的ROOT文件夹内容(即替换tomcat的启动主页),将下载的war包解压到webapps/ROOT中,直接替换就可以

 

   注意:jdk不要使用1.8。本次实验使用的为1.6

 

2,启动tomcat,訪问ip:8080就可以或者假设是本地的话使用localhost:8080

输入usernamepassword,在E:\apache-tomcat-7.0.6-dubbo\webapps\ROOT\WEB-INF下的dubbo.properties文件里就可以查看到,如:

3,訪问

4,启动我们的服务提供者和消费者就可以查看到

 

总体说明

    

    Zookeeper(注冊中心)部署到213的机子上。服务提供者和服务消费者均在215的机子上执行。当然我们也能够分别将服务提供者和服务消费者部署到不同的两台机子上。

长处:

    服务提供者和服务消费者仅仅须要知道注冊中心就可以,它们之间打交道需通过注冊中心这个第三方。仅仅要是注冊中心中已经注冊的服务,我们均能够使用,实现了服务提供者和服务消费者间的解耦。

你可能感兴趣的文章
python--getattr函数
查看>>
element-ui中tabs页设置第一个页面不可关闭
查看>>
Node.js开发入门—HelloWorld再分析
查看>>
准备开源用javascript写Tomcat下的WebApp的项目
查看>>
javascript闭包具体解释
查看>>
CDH- CDH大数据集群运维
查看>>
关于DDD的 认识
查看>>
Python - - 模块 - - 认识模块 和 包
查看>>
jQuery选择器中空格的问题再探究
查看>>
Malab 常用数学函数
查看>>
dom4j详解
查看>>
matlab练习程序(模拟退火SA)
查看>>
为什么shader切换很耗效率(论坛帖备注)
查看>>
OpenRTSP的使用
查看>>
cookie 跨域访问的解决方案
查看>>
NPOI保存到服务器和导出到客户端
查看>>
iOS中你必须了解的多线程
查看>>
CodeForces Gym 101047E Escape from Ayutthaya BFS
查看>>
[转载] 问题解决:FFmpeg视频编解码库,无法解析的外部信号
查看>>
eclipse中的乱码问题
查看>>