Dubbo服务提供消费者接口搭建
创建Maven项目=> user-service-provider 服务提供者

UserAddress**
public class UserAddress implements Serializable{private Integer id;private String userAddress; //用户地址private String userId; //用户idprivate String consignee; //收货人private String phoneNum; //电话号码private String isDefault; //是否为默认地址 Y-是 N-否//get set//有参构造 无参构造}
UserService
//用户服务public interface UserService {/*** 按照用户id返回所有的收货地址* @param userId* @return*/public List<UserAddress> getUserAddressList(String userId);}
UserServiceImpl
public class UserServiceImpl implements UserService {public List<UserAddress> getUserAddressList(String userId) {UserAddress address1 = new UserAddress(1, "河南省郑州巩义市宋陵大厦2F", "1", "安然", "150360313x", "Y");UserAddress address2 = new UserAddress(2, "北京市昌平区沙河镇沙阳路", "1", "情话", "1766666395x", "N");return Arrays.asList(address1,address2);}}
创建Maven项目=> order-service-consumer 服务消费者(订单服务)
OrderService**
public interface OrderService {/*** 初始化订单* @param userID*/public void initOrder(String userID);}
OrderServiceImpl
因服务消费者要拿到提供者的方法
将**服务提供者中的实体类及UserService**复制到当前消费者同级文件中
OrderServiceImpl
public class OrderServiceImpl implements OrderService {public UserService userService;public void initOrder(String userID) {//查询用户的收货地址List<UserAddress> userAddressList = userService.getUserAddressList(userID);System.out.println(userAddressList);}}
此时我们调用userservice肯定是要报错的。这种面向接口的方式,我们这里只是调到了接口,而接口实际是在另外一个项目中,如果我们两个项目工程都创建共同的实体类,太过于麻烦了,我们可以将服务接口,服务模型等单独放在一个项目中,更为方便调用。
将提供者和消费者项目中的所有实体类复制到当前相关的文件包下,删除原有的实体类包及service包,也就是将实体类及service放在了当前公共的项目中。
把服务提供者和消费者项目中引入以下依赖,引入项目不再报错。
<dependency><groupId>com.lemon.gmail</groupId><artifactId>gmail-interface</artifactId><version>1.0-SNAPSHOT</version></dependency>
服务提供者配置及测试
在 user-service-provider 服务提供者项目中引入依赖
<!--dubbo--><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!--注册中心是 zookeeper,引入zookeeper客户端--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency>
在resource文件中创建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://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)--><dubbo:application name="user-service-provider"></dubbo:application><!--2、指定注册中心的位置--><!--<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>--><dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry><!--3、指定通信规则(通信协议? 服务端口)--><dubbo:protocol name="dubbo" port="20880"></dubbo:protocol><!--4、暴露服务 让别人调用 ref指向服务的真正实现对象--><dubbo:service interface="com.lemon.gmail.service.UserService" ref="userServiceImpl"></dubbo:service><!--服务的实现--><bean id="userServiceImpl" class="com.lemon.gmail.service.impl.UserServiceImpl"></bean></beans>
编写一个ProviderApplication启动类程序,运行测试配置
public class MailApplication {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext applicationContext= new ClassPathXmlApplicationContext("provider.xml");applicationContext.start();System.in.read();}}

启动zookeeper注册中心的zkServer.cmd、和zkCli.cmd服务
在dubbo-admin target中cmd运行 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
再次启动项目,我们可以看到在zk中已经发现服务提供者。
服务提供者的配置和测试完成
服务消费者配置及测试
在 order-service-consumer 服务消费者项目中引入依赖
<!--dubbo--><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!--注册中心是 zookeeper,引入zookeeper客户端--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency>
创建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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!--包扫描--><context:component-scan base-package="com.lemon.gmail.service.impl"/><!--指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)--><dubbo:application name="order-service-consumer"></dubbo:application><!--指定注册中心的位置--><dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry><!--调用远程暴露的服务,生成远程服务代理--><dubbo:reference interface="com.lemon.gmail.service.UserService" id="userService"></dubbo:reference></beans>
把当前OrderServiceImpl实现类中加上注解
@Servicepublic class OrderServiceImpl implements OrderService {@Autowiredpublic UserService userService;public void initOrder(String userID) {//查询用户的收货地址List<UserAddress> userAddressList = userService.getUserAddressList(userID);//为了直观的看到得到的数据,以下内容也可不写System.out.println("当前接收到的userId=> "+userID);System.out.println("**********");System.out.println("查询到的所有地址为:");for (UserAddress userAddress : userAddressList) {//打印远程服务地址的信息System.out.println(userAddress.getUserAddress());}}}
编写一个ConsumerApplication启动类程序,运行测试配置
public class ConsumerApplication {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");OrderService orderService = applicationContext.getBean(OrderService.class);//调用方法查询出数据orderService.initOrder("1");System.out.println("调用完成...");System.in.read();}}
注意:消费者的运行测试需要先启动提供者。
启动服务提供者、消费者。及zookeeper的和dubbo-admin,查看监控信息。
localhost:7001
dubbo-monitor-simple简易监控中心
进入dubbo-monitor-simple文件,执行cmd命令,mvn package打包成jar包

将 dubbo-monitor-simple-2.0.0-assembly.tar.gz 压缩包解压至当前文件夹,解压后config文件查看properties的配置是否是本地的zookeeper。
打开解压后的 assembly.bin 文件,start.bat 启动dubbo-monitor-simple监控中心
在浏览器 localhost:8080 ,可以看到一个监控中心。
在服务提供者和消费者的xml中配置以下内容,再次启动服务提供和消费者启动类。
<!--dubbo-monitor-simple监控中心发现的配置--><dubbo:monitor protocol="registry"></dubbo:monitor><!--<dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>-->

可以看到,这个监控中心也捕获到了服务提供和消费者信息

