1 架构图
![dubbo架构](https://i-blog.csdnimg.cn/blog_migrate/b910035aa14835c49601d540c540f3bf.png)
2 服务提供者
2.1 定义服务接口(该接口需单独打包,在服务提供方和消费方共享)
public interface DemoService{
String sayHello(String name);
}
2.2 在服务提供方实现接口(对服务消费方隐藏实现)
public class DemoServiceImpl implements DemoService{
public String sayHello(String name){
return “Hello " +name;
}
}
2.3 用spring配置声明暴露服务
<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方应用信息,用于计算依赖关系-->
<dubbo:application name="provider" />
<!--使用multicast广播注册中心暴露服务地址-->
<dubbo:registry address="multicast://192.168.1.128"/>
<!--用dubbo协议在20880端口暴露服务-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--声明需要暴露的服务接口-->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="DemoService"/>
<!--和本地bean一样实现服务-->
<bean id="com.alibaba.dubbo.demo.DemoServiceImpl "/>
</beans>
2.4 加载spring配置
public class Provider{
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
context.start;
System.in.read();
}
}
3 服务消费者
3.1 通过spring配置引入远程服务
<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--消费者方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样-->
<dubbo:application name="consumer" />
<!--使用multicast广播注册中心暴露发现服务地址-->
<dubbo:registry address="multicast://192.168.1.128"/>
<!--生成远程服务代理,可以和本地bean一样使用demoservice-->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService"/>
</beans>
3.2 加载spring配置,并调用远程服务(也可以使用IOC注入)
public class Consumer{
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"consumer.xml"});
context.start;
Demoservice demoservice = (Demoservice )context.getBean("demoservice");
String Hello = demoservice.sayHello("world");
System.out.println(hello);
}
}