windows下本地运行和消费dubbo服务

小编 2026-06-09 阅读:333 评论:0
最简单的dubbo应用包括三部分:服务提供者provider、服务消费者consumer...

最简单的dubbo应用包括三部分:服务提供者provider、服务消费者consumer、注册中心。

 

前两个都是我们自己编写的,第三个注册中心推荐使用稳定性更好的zookeeper。

 

所以我们需要先下载zookeeper: http://apache.fayea.com/zookeeper/current/

下载后解压到某个目录,进入里面的conf目录。将zoo_sample.cfg复制一份,改名为zoo.cfg。

修改其内容为

tickTime=2000initLimit=10syncLimit=5dataDir=D:\data\zookeeperclientPort=2181

 其中的dataDir可以自由修改。

进入zookeeper的bin目录,运行zkServer.cmd

 { 要测试是否运行良好的话可以运行zkCli.cmd }

 

 

接下来打开eclipse,新建maven项目,arctype使用默认的quickstart就可以。

修改pom.xml文件:

<dependencies>		<dependency>			<groupId>com.alibaba</groupId>			<artifactId>dubbo</artifactId>			<version>2.0.13</version>		</dependency>		<dependency>			<groupId>org.apache.zookeeper</groupId>			<artifactId>zookeeper</artifactId>			<version>3.3.6</version>			<exclusions>				<exclusion>					<groupId>log4j</groupId>					<artifactId>log4j</artifactId>				</exclusion>			</exclusions>		</dependency>		<dependency>			<groupId>log4j</groupId>			<artifactId>log4j</artifactId>			<version>1.2.16</version>		</dependency>	</dependencies>

 

在Java源文件夹下新建接口,这个接口要给provider和consumer都使用

public interface DemoService {	public void sayHello();		public String returnHello();		public MsgInfo returnMsgInfo(MsgInfo info);}

 新建其实现类

public class DemoServiceImpl implements DemoService{	public void sayHello() {		System.err.println("Hello world.");	}	public String returnHello() {		return "hello world";	}	public MsgInfo returnMsgInfo(MsgInfo info) {		info.getMsgs().add("done!");		return info;	}}

 新建一个测试实体

public class MsgInfo implements Serializable {	int id;	String name;	List<String> msgs;//getters setters}

 

在资源文件夹下新建目录spring(虽然不是必要的,不过我们是和spring集成的)。

在里面新建xml文件dubbo-provider.xml

<?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">	<!-- 提供方应用信息,用于计算依赖关系 -->	<dubbo:application name="hello-world-app" />	<dubbo:registry  protocol="zookeeper" address="127.0.0.1:2181" /> 	<!-- 用dubbo协议在20880端口暴露服务 -->	<dubbo:protocol name="dubbo" port="20880" />	<!-- 声明需要暴露的服务接口 -->	<dubbo:service interface="com.abc.qkdb.DemoService" ref="demoService" />	<!-- 和本地bean一样实现服务 -->	<bean id="demoService" class="com.abc.qkdb.DemoServiceImpl" /></beans>

 其中的<dubbo:registry>就是注册中心这里使用的是zookeeper,其他选项可以参考http://dubbo.io/Administrator+Guide-zh.htm#AdministratorGuide-zh-Redis%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83%E5%AE%89%E8%A3%85

相同目录下新建dubbo-consumer.xml

<?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">             <!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->         <dubbo:application name="consumer-of-helloworld-app" />         <!--zookeeper注册中心 -->         <dubbo:registry  protocol="zookeeper" address="127.0.0.1:2181" />           <!-- 生成远程服务代理,可以和本地bean一样使用demoService-->         <dubbo:reference id="demoService" interface="com.abc.qkdb.DemoService" /></beans>

 注意里面也包含<dubbo:registry>结点。

 

 

回到Java文件夹,新建服务类

import java.io.IOException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class LuncherProvider {	public static void main(String[] args) throws InterruptedException, IOException {		LuncherProvider provider = new LuncherProvider();		provider.start();		System.in.read();	}	void start() {		String configLocation = "spring/dubbo-provider.xml";		ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);		String[] names = context.getBeanDefinitionNames();		for (String name : names) {			System.err.println(name);		}	}}

 新建消费者类

import java.util.ArrayList;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class LuncherConsumer {	public static void main(String[] args) {		LuncherConsumer provider = new LuncherConsumer();		provider.start();	}	void start() {		String configLocation = "spring/dubbo-consumer.xml";		ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);		DemoService ds = (DemoService) context.getBean("demoService");		String[] names = context.getBeanDefinitionNames();		System.out.print("Beans:");		for (String string : names) {			System.out.println(string);		}				MsgInfo info = new MsgInfo();		info.setId(1);		info.setName("ruisheh");		List<String> msgs = new ArrayList<String>();		msgs.add("I");		msgs.add("am");		msgs.add("test");		info.setMsgs(msgs);		System.out.println(ds.returnMsgInfo(info).getMsgs());		System.err.println(ds.returnHello());	}}

 

编码完毕。

先运行LuncherProvider类,没有错误输出后(会输出context中的bean)运行LuncherConsumer,输出

[I, am, test, done!]

hello world

即为正常。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表