快速启动
使用xml的方式进行配置,详细配置项:配置参考手册
定义服务接口
1 2 3 4 5
| package com.alibaba.dubbo.demo;
public interface DemoService { String sayHello(String name); }
|
服务提供方实现接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.alibaba.dubbo.demo.provider;
import com.alibaba.dubbo.demo.DemoService; import com.alibaba.dubbo.rpc.RpcContext;
import java.text.SimpleDateFormat; import java.util.Date;
public class DemoServiceImpl implements DemoService {
@Override public String sayHello(String name) { System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress()); return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); } }
|
服务提供方服务暴露配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?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-provider" owner="gentryhuang"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/> <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/>
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"/>
</beans>
|
启动Spring容器,进行服务暴露
1 2 3 4 5 6 7 8 9 10 11 12 13
| package com.alibaba.dubbo.demo.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"}); context.start();
System.in.read(); } }
|
服务消费者引用服务配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?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://127.0.0.1:2181"/>
<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService"/>
</beans>
|
加载Spring配置,并调用远程服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package com.alibaba.dubbo.demo.consumer;
import com.alibaba.dubbo.demo.DemoService; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Consumer {
public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"}); context.start(); DemoService demoService = (DemoService) context.getBean("demoService");
while (true) { try { Thread.sleep(5000); String hello = demoService.sayHello("world"); System.out.println(hello);
} catch (Throwable throwable) { throwable.printStackTrace(); } } } }
|
小结
dubbo自定义了很多的xml标签,这些标签就对应了API配置中的配置对象,标签的属性就对应配置对象的属性,API的方式是手动创建配置对象并设置属性值,xml的方式是创建配置对象和设置属性值都交给Spring来完成,注意DubboBeanDefinitionParser设置的属性值不包括系统参数、dubbo.properties等,而是xml中配置对象的属性。这些标签是怎么和pring融合的在spring自定义标签中已经介绍了实现原理,在后面的dubbo配置解析中会继续说明。更多的配置请参考:配置参考手册。下一篇文章中我们介绍使用注解的方式进行配置,这种方式更简洁,效率更高。