远程服务配置:
提供方暴露服务配置:<dubbo:service>,消费方增加引用服用:<dubbo:reference>
1、服务结构:分三个项目(接口类,提供类(实现接口),消费类(调用接口))
2、接口类
定义接口:
//会员服务提供接口
public interface UserService {
//使用用户id查询用户信息
public String getUser(Long id);
}
3、实现接口
实现接口:
public class UserServiceImpl implements UserService{
//rpc远程调用
public String getUser(Long id) {
System.out.println("########################## id:"+id);
if(id==1){
return "demo1";
}else if(id==2){
return "demo2";
}
return "none";
}
}
启动会员服务:
//服务端提供者再写一个启动类
public class Provider {
public static void main(String [] args) throws Exception{
//加载配置文件,创建临时节点
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("provider.xml");
applicationContext.start();
System.out.println("会员服务启动---------");
//能一直保持服务启动
System.in.read();
}
}
引入接口jar包(pom.xml)
<dependencies>
<!-- 引入会员接口 -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>member-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.6</version>
</dependency>
<!-- 引入zk客户端 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
定义provider.xml(配置文件)
<beans 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 " xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="provider"/>
<!-- 使用zookeeper注册中心暴露服务地址,首先启动zk -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!-- 用dubbo协议在29014端口暴露服务 -->
<dubbo:protocol name="dubbo" port="29014"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service ref="userService" interface="com.demo.member.service.UserService"/>
<!-- 具体的实现该接口的bean -->
<bean class="com.demo.member.service.impl.UserServiceImpl" id="userService"/>
</beans>
4、调用接口服务
//dubbo支持泛化调用,所谓泛化调用,最最直接的表现就是服务消费者不需要有任何接口的实现,就能完成服务的调用。
public class OrderService {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("consumer.xml");
applicationContext.start();
//启动订单服务
System.out.println("订单服务启动成功");
UserService userService=(UserService) applicationContext.getBean("userService");
System.out.println("订单服务调用会员服务开始");
String result=userService.getUser(1l);
System.out.println("订单服务调用会员服务结束。。。result:"+result);
}
}
consumer.xml(消费者配置文件)
<beans 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" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer"/>
<!-- 向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" protocol="zookeeper"/>
<!-- 使用dubbo协议调用定义好的api接口,generic="true"表示该接口支持泛型调用 generic="true"-->
<dubbo:reference interface="com.demo.member.service.UserService" id="userService" />
</beans>
pom.xml(消费者pom配置文件)
<dependencies>
<!-- 引入会员接口 -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>member-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.6</version>
</dependency>
<!-- 引入zk客户端 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
运行结果:
zookeeper连接显示: