dubbo分布式服务框架入门实例

dubbo是一个分布式服务框架,支持rpc即远程服务调用,底层基于Netty实现,现在项目中使用,都是通过spring来集成,很容易和spring项目结合使用,配置使用dubbo服务,就和配置本地服务一样,传统基于http调用的服务,都可以通过dubbo来改造实现。dubbo支持负载均衡,是一个理想的服务治理框架。dubbo框架体现了soa的思想,将服务统一管理,便于维护,消费者与服务提供者实现弱耦合。

dubbo服务涉及到的角色有:

  • 注册中心:提供服务注册与服务发现功能,容器启动,服务提供者会在这里注册自己提供的服务,服务消费者会在这里订阅自己所需的服务。
  • 服务提供者:暴露服务的服务提供方
  • 服务消费者:需要调用远程服务的消费方
  • 监控中心:统计服务调用的次数和调用时间

下面给出一个最简单的示例: 

dubbo默认使用zookeeper做配置管理,因此底层也需要依赖zookeeper,我们做这个示例之前,需要安装一个zookeeper,windows下可以直接下载zookeeper压缩包,解压即可。我们需要拷贝一份配置conf目录下zoo_sample.cfg为zoo.cfg,使用默认配置,我们无需做任何修改,zookeeper默认开启2181端口。在windows下启动zookeeper,只需要在zookeeper安装目录的命令行下运行bin\zkServer.cmd

启动之后,没有报错,就表示启动成功,会开启2181监听端口,等待客户端连接:

 

接着,我们可以创建我们的maven工程,我们创建一个dubboservice的父工程,然后创建三个子模块,分别是接口模块,服务提供者模块,消费者模块。

只需要在parent工程的pom.xml配置文件中加入依赖:

<dependencies>
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>dubbo</artifactId>
   <version>2.5.3</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>4.3.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.8</version>
</dependency>
<dependency>
  <groupId>com.101tec</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.10</version>
</dependency>
</dependencies>
<modules>
<module>dubbo-api</module>
<module>dubbo-provider</module>
<module>dubbo-comsumer</module>
</modules>

在dubbo-api项目模块中编写服务接口BusinessService.java

package com.xxx.service;

public interface BusinessService {
	String hello(String name);
	int add(int a,int b);
}

dubbo-provicer项目模块中,实现BusinessService接口

首先这个模块要依赖dubbo-api,因此pom.xml文件中需要加入依赖:

<dependency>
  <groupId>com.xxx</groupId>
  <artifactId>dubbo-api</artifactId>
  <version>1.0</version>
</dependency>

编写实现BusinessService接口的服务类:

package com.xxx.service;
public class BusinessServiceImpl implements BusinessService{

	@Override
	public String hello(String name) {
		return "hello,"+name+",this is dubbo service provider,welcome you.";
	}

	@Override
	public int add(int a, int b) {
		return a + b;
	}
    
}

使用spring配置文件,配置服务提供者提供的服务,以及注册地址,配置文件中需要加入dubbo命名空间

<?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="dubbo-provider"/>
    <dubbo:registry protocol="zookeeper" address="zookeeper://localhost:2181"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <bean id="businessService" class="com.xxx.service.BusinessServiceImpl"/>
    <dubbo:service interface="com.xxx.service.BusinessService" ref="businessService"/>
</beans>

编写服务启动类,等待消费者来消费服务:

package com.xxx.service;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProviderServer {

	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-provider.xml"});
		context.start();
		System.out.println("dubbo service provider start ok.");
		System.in.read();
	}

}

 最后,我们来准备服务消费者dubbo-consumer项目模块代码,同样需要引入dubbo-api依赖。

<dependency>
  <groupId>com.xxx</groupId>
  <artifactId>dubbo-api</artifactId>
  <version>1.0</version>
</dependency>

作为消费者,除启动消费者之外,无需额外的代码,但是我们也需要一个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">

    <dubbo:application name="dubbo-consumer"/>
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <dubbo:reference interface="com.xxx.service.BusinessService" id="businessService"/>
</beans>

配置服务发现的地址,以及我们需要调用的服务接口。

编写启动消费者类:

package com.xxx.service;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ComsumerMain {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-comsumer.xml"});
		context.start();
		BusinessService service = (BusinessService) context.getBean("businessService");
		String hello = service.hello("consumer");
		System.out.println(hello);
		int result = service.add(5, 3);
		System.out.println("service.add(5,3)="+result);
	}

}

代码中,我们启动消费者服务,找到我们需要调用的服务businessService,然后调用它的hello(String name)方法和add(int a,int b)方法,分别获得返回值,然后打印结果。

运行以上程序,打印信息如下:

服务提供方控制台信息:

服务消费者控制台信息:

通过示例,服务消费方成功调用了服务提供方的服务,得到了预期结果。我们可以通过zookeeper终端查看我们的服务,zookeeper安装目录命令行下运行bin\zkCli.cmd命令:

我们通过ls /dubbo命令,查看到com.xxx.service.BusinessService服务注册到了zookeeper的/dubbo节点上。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值