dubbo快速开始

快速开始使用 Dubbo

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。

如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。

  • 项目结构图

服务提供者(Service provider)

定义服务接口(Defining service interfaces)

DemoService.java :

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

package hosystem;

public interface DemoService {
String sayHello(String name); }

The project structure should look like this:

.
├── dubbo-interface
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── hosystem
│ └── DemoService.java

在服务提供方实现接口(Implement interface in service provider)

DemoServiceImpl.java :

对服务消费方隐藏实现

package hosystem.Impl;

import hosystem.DemoService;

public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}

用 Spring 配置声明暴露服务(Exposing service with Spring configuration)

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://dubbo.apache.org/schema/dubbo"
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="hello-world-app" /> <!-- 使用zookeeper广播注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.188.128:2181" /> <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="hosystem.DemoService" ref="demoService"/> <!-- 和本地bean一样实现服务 -->
<bean id="demoServiceImpl" class="hosystem.Impl.DemoServiceImpl"/>
</beans>

配置日志记录系统(Configure the logging system)

默认情况下,Dubbo使用log4j作为日志记录系统,它还支持slf4j,Apache Commons Logging和JUL日志记录。

以下是一个示例配置:

log4j.properties :

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n

加载 Spring 配置(Bootstrap the service provider)

Provider.java :

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class provider {
public static void main(String[] args) throws Exception {
// provider.xml文件的位置resources下的 若直接放在resources下则不需要前缀
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
context.start();
System.in.read(); // 按任意键退出
}
}

the project structure should look like this:

├── dubbo-provider
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── hosystem
│ │ └── Impl
│ │ └── DemoServiceImpl.java
│ │ └── Provider.java
│ └── resources
│ └── provider.xml
│ └── log4j.properties

服务消费者(Service consumer)

通过 Spring 配置引用远程服务

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://dubbo.apache.org/schema/dubbo"
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="consumer-of-helloworld-app" /> <!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry address="zookeeper://192.168.188.128:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="hosystem.DemoService" />
</beans>

加载Spring配置,并调用远程服务

Consumer.java :

也可以使用 IoC 注入

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService; public class Consumer {
public static void main(String args[]) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("consumer.xml");
DemoService demoService = (DemoService) ctx.getBean("demoService");
System.out.println("DemoService...start ");
System.out.println(demoService.sayHello("hosystem") + " successful run...");
System.out.println("DemoService...end ");
}
}

the project structure should look like this:

├── dubbo-demo-provider
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── Consumer.java
│ └── resources
│ └── consumer.xml
│ └── log4j.properties

测试:

先运行dubbo-pro,在运行dubbo-consumer

参考文档1: 点我传送-dubbo快速开始

参考文档2: 点我传送-zookeeper安装

最新文章

  1. FFMpeg video duration
  2. 【学】jQuery的源码思路4——增加一些功能
  3. A multi-faceted language for the Java platform
  4. rman恢复误删除的一张表(不完全恢复)
  5. POJ 1422 二分图(最小路径覆盖)
  6. jQuery之Nestable
  7. bzoj3140
  8. asp.net MVC 应用程序的生命周期(下)
  9. NOIP 2011 提高组 计算系数
  10. MD中bitmap源代码分析--入题概述
  11. Struts+Spring+Hibernate进阶开端(一)
  12. iOS手动管理内存
  13. js List&lt;Map&gt; 将偏平化的数组转为树状结构并排序
  14. 由于 web 服务器上此资源的访问控制列表(acl)配置或加密设置,您无权查看此目录或页面。
  15. 浅谈Maven
  16. 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结(一)
  17. [开发技巧]&#183;Numpy广播机制的深入理解与应用
  18. Pyhon进阶9---类的继承
  19. [Swift]LeetCode56. 合并区间 | Merge Intervals
  20. TensorFlow深度学习入门

热门文章

  1. Codeforces Round #655 (Div. 2) D. Omkar and Circle
  2. hdu 2072 单词数(字符串)
  3. poj3580 SuperMemo (Splay+区间内向一个方向移动)
  4. c语言实现--带头结点单链表操作
  5. Codeforces Round #540 (Div. 3) C. Palindromic Matrix (大模拟)
  6. .net中swagger忽略某些字段
  7. 操作系统 part3
  8. console.dir()可以显示一个对象所有的属性和方法
  9. vue开发环境和生产环境配置
  10. Node.js 文件上传 cli tools