在本篇文章中我们将通过集体的示例来对Dubbo的提供和消费进行代码层面的认识.这里所介绍的是基本的提供者和消费者通过Spring容器来进行相关的提供和消费的服务.首先看整个示例的项目结构如下:
我们通过Maven的方式来进行示例,其中dubbo-demo-api为提供者所定义的接口,项目结构如下:
此项目里的内容很简单,为服务的一个接口DemoService: /dubbo-demo/dubbo-demo-api/src/main/java/org/pactera/dubbo/DemoService.java
packageorg.pactera.dubbo;
/** * * @author Qing * */ publicinterface DemoService {
public String sayHello(String str);
}
Dubbo-demo-provider为服务提供者的示例项目,结构如下图:
Dubbo-demo-consumer为服务消费者的示例项目,结构如下图:
以上是整个示例程序的整体框架. 接下来我们将从提供者的项目入手开始.在提供者的项目里先要对相关提供的服务进行配置.
1 在Dubbo-demo-provider的项目里我们需要用到Dubbo,Zookeeper,以及dubbo-demo-api的相关java包,因此需要在pom.xml对其进行引用,如下:
<dependencies> <dependency> <groupId>org.pactera.dubbo</groupId> <artifactId>dubbo-demo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.4.10</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
2 接下来为了能够让Dubbo的提供者通过Spring方式加载,我们需要对其进行相关配置,如下文件内容.
/dubbo-demo/dubbo-demo-provider/src/main/resources/dubbo-demo-provider.xml
<?xmlversion="1.0" encoding="UTF-8"?> <beansxmlns="http://www./schema/beans" xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:dubbo="http://code./schema/dubbo" xsi:schemaLocation="http://www./schema/beans http://www./schema/beans/spring-beans.xsd http://code./schema/dubbo/dubbo.xsd "> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:applicationname="hello-world-app" />
<!-- 使用zookeeper广播注册中心暴露服务地址 --> <dubbo:registryprotocol="zookeeper" address="127.0.0.1:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo"port="20881" /> <dubbo:monitorprotocol="registry"></dubbo:monitor>
<!-- 声明需要暴露的服务接口 --> <dubbo:serviceinterface="org.pactera.dubbo.DemoService" ref="demoService"/> <!-- 和本地bean一样实现服务 --> <bean id="demoService"class="org.pactera.dubbo.provider.DemoServiceImpl" /> </beans>
3 需要将dubbo提供的服务接口进行实现.
/dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/provider/DemoServiceImpl.java
packageorg.pactera.dubbo.provider;
importcom.alibaba.dubbo.rpc.RpcContext; importlombok.extern.slf4j.Slf4j; importorg.pactera.dubbo.DemoService;
@Slf4j publicclass DemoServiceImpl implements DemoService { public String sayHello(String str) { System.out.println("reqInfo: "+ str + ", request form consumer: " +RpcContext.getContext().getRemoteHost()); return "Hello " + str; } }
4 接下来我们需要再写一个提供者启动服务的程序,主要是用来启动Spring容器,并注入相关的服务,同时将提供者的内容注册到Zookeeper中.
启动程序如下: /dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/Bootstrap.java
packageorg.pactera.dubbo;
importcom.google.common.util.concurrent.AbstractIdleService; importlombok.extern.slf4j.Slf4j; importorg.springframework.context.support.ClassPathXmlApplicationContext;
@Slf4j publicclass Bootstrap extends AbstractIdleService {
private ClassPathXmlApplicationContextcontext;
public static void main(String[] args) { Bootstrap bootstrap = new Bootstrap(); bootstrap.startAsync(); try { Object lock = new Object(); synchronized (lock) { while (true) { lock.wait(); } } } catch (InterruptedException ex) { System.err.println("ignoreinterruption"); } }
/** * Start the service. */ @Override protected void startUp() throws Exception { context = newClassPathXmlApplicationContext("dubbo-demo-provider.xml"); context.start(); context.registerShutdownHook(); System.out.println("----------------provider service startedsuccessfully------------"); }
/** * Stop the service. */ @Override protected void shutDown() throws Exception{ context.stop(); System.out.println("-------------service stoppedsuccessfully-------------"); } }
5 提供者服务启动日志:
至此,服务者Provider的示例基本上已经结束,如果读者配置监控中心的话,可以打开监控中心搜索demoService,你便可以在监控中心看到此提供者服务的具体信息.限于篇幅的原因,关于消费者的相关示例将在接下来的文章进行阐述. |
|
来自: 昵称20874412 > 《dubbo》