# Dubbo—hello world
Apache Dubbo (incubating) 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
接下来用一个实例,简单的结束dubbo的使用。
将接口建为一个独立的模块
建一个接口类 :
/**
* @author xsh
* @date 2019/2/27
* @since 1.0.0
*/
public interface IUserService {
String sayHey(String userName);
}
在父工程加入dubbo对应的依赖:
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.0-alpha</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.0</version>
</dependency>
创建服务提供方
依赖dubbo-api
实现接口 :
/**
* @author xsh
* @date 2019/2/27
* @since 1.0.0
*/
public class UserServiceImpl implements IUserService {
@Override
public String sayHey(String userName) {
System.out.println(" provider ---> invoking ");
return userName+ ": hey ! ";
}
}
在resources 目录下建一个META-INF.spring.provider.xml ,这里是因为dubbo 内部使用了Spring 会在该目录下寻找配置
/**
* SpringContainer. (SPI, Singleton, ThreadSafe)
*/
public class SpringContainer implements Container {
public static final String SPRING_CONFIG = "dubbo.spring.config";
// 加载配置 在META-INF/spring
public static final String DEFAULT_SPRING_CONFIG = "classpath*:META-INF/spring/*.xml";
private static final Logger logger = LoggerFactory.getLogger(SpringContainer.class);
static ClassPathXmlApplicationContext context;
public static ClassPathXmlApplicationContext getContext() {
return context;
}
@Override
public void start() {
String configPath = ConfigUtils.getProperty(SPRING_CONFIG);
if (configPath == null || configPath.length() == 0) {
configPath = DEFAULT_SPRING_CONFIG;
}
context = new ClassPathXmlApplicationContext(configPath.split("[,\\s]+"));
context.start();
}
.....
provider.xml:
<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.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-provider"/>
<dubbo:registry address="zookeeper://192.168.2.191:2181"/>
<dubbo:service id="userService" interface="com.jay.api.IUserService" ref="userServiceImpl"/>
<bean id="userServiceImpl" class="com.jay.provider.UserServiceImpl" />
</beans>
启动类:
public class App {
public static void main( String[] args ) {
Main.main(args);
}
}
服务调用方
依赖dubbo-api
在resources 目录下建一个META-INF.spring.consumer.xml
consumer.xml:
<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.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-consumer"/>
<dubbo:registry address="zookeeper://192.168.2.191:2181"/>
<dubbo:reference id="userService" check="false" interface="com.jay.api.IUserService"/>
</beans>
启动类:
public class App {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/consumer.xml");
IUserService userService = (IUserService) context.getBean("userService");
String result = userService.sayHey("xsh");
System.out.println(result);
}
}
启动zookeeper ;
结果:
xsh : hey !
代码已上传GitHub : https://github.com/peonutButter/dubbo