导语
在之前的学习中了解了关于Dubbo的一些基本的概念,但是概念毕竟是概念,更多的还需要通过自己编写代码的方式进行进一步的提高下面就来编写第一个入门的Dubbo应用。
首先通过IDEA或者是Eclipse创建一个Java项目。引入项目所需要的jar包,当然也可以通过构建Maven工程的方式来实现。
第一步创建服务提供者
public interface SampleService{
String sayHello();
}
public class SampleServiceImpl extends SampleServic{
public String sayHello(String name){
System.out.println("Hello"+name)
}
}
定义完接口和接口实现之后就需要编写配置文件
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--具体实现的Bean对象-->
<bean id="sampleService" class="com.example.impl.SampleServiceImpl"/>
<!--提供方应用信息,用于计算依赖关系。为当前的应用系统指定一个名称-->
<dubbo:application name="demo-provider"/>
<!--通过实现指定的注册中心,这里使用的Zookeeper,所以在使用的时候要添加关于Zookeeper链接相关的Jar包-->
<dubbo:registry address="zookeeper://224.5.6.7:1234"/>
<!--在使用Dubbo协议的时候默认暴露的端口 这个可以随便定义一个-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--声明需要暴露的服务接口,写操作可以设置retries=0(这个可以先不用管) 避免重复调用SOA服务-->
<dubbo:service retries=“0” interface="com.example.SampleService" ref="sampleService"/>
</beans>
这里需要一个注意的点就是Bean的ID一定要与下面声明暴露服务的接口的ref属性相同。
那么怎么实现提供服务的,一般情况下来讲,我们需要将实现服务提供的类打包成Jar的形式发布的服务器上,但是为了简单的测试起见,我们可以通过启动Spring容器的方式进行服务提供方的暴露,在开发中也一种方式。当然了在工作中常用的方式是使用Dubbo中自带的Main方法进行服务的启动。
public class Provider{
public static void main(String[] args) throws Excption{
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"})
context.start();
System.in.read(); //这里是为了保证服务,通过输入流的方式进行阻塞,当我们不输入数据的时候程序是不会停止。
}
}
到这里直接启动是会报错的,因为在配置文件中编写了对应的注册中心,所以说要实现对应的Zk注册中心。这个可以结合之前的博客Zookeeper集群的搭建 去搭建一个对应的Zookeeper三个节点的集群。
第二步实现服务消费方
在服务消费方需要使用服务提供者提供的接口的时候,那么消费方也需要有同样的接口。在实际开发中这些接口都是包含在一个写好的服务中,这些接口都是依赖这个服务的,所以说不需要直接操作接口只需要操作对应的服务即可。
在引入了对应的接口之后来看一下具体的使用,也是通过Spring容器直接进行启动
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
context.start();
// 获取到Provider提供的服务
SampleService demoService = (SampleService)context.getBean("sampleService");
// 执行远程调用方法
String hello = demoService.sayHello("world");
// 在控制台打印相应的结果
System.out.println(hello);
}
}
这里重点关注的就是这个服务消费方的配置文件是怎么写的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--服务消费方应用名,用于计算对应的依赖关系,不是匹配条件,不能与服务提供方一样-->
<dubbo:application name="demo-consumer"/>
<!--接入对应的与服务提供方一样的注册中心 -->
<dubbo:registry address="zookeeper://224.5.6.7:1234"/>
<!-- 生成远程服务代理,可以像是使用本地Bean的方式去实现sampleService,检查寄来依赖关系,默认为true,当有需要依赖服务的时候,需要根据需求进行设置-->
<dubbo:reference id="sampleService" check="false" interface="com.exmaple.SampleService"/>
</beans>
这个例子与Dubbo提供的源码中的demo是一样的,到后期分享关于Dubbo源码学习笔记的时候还会提到这个入门项目。
当我们的服务提供方项目启动的时候,会在Zookeeper的根目录下面创建一个dubbo的节点,这节点中就包含了服务提供方的信息。这个时候服务提供方就开始通过Zookeeper注册中心像外提供相应的服务了。接下来就是启动服务消费方,就需要通过Zookeeper注册中心来找到对应的服务提供方,实现对于对应服务的调用。
总结
通过上面的例子简单的分析了一下关于Dubbo入门程序的编写,通过上面的例子也是个人对于Dubbo理论的更深一步的了解。结合之前的理论对于Dubbo的简单使用。更加加深了对于Dubbo框架的了解。