基于以下图实现服务 提供者、消费者
Dubbo环境搭建,创建提供者,消费者项目 - 图1

Dubbo服务提供消费者接口搭建

创建Maven项目=> user-service-provider 服务提供者
Dubbo环境搭建,创建提供者,消费者项目 - 图2
Dubbo环境搭建,创建提供者,消费者项目 - 图3

UserAddress**

  1. public class UserAddress implements Serializable{
  2. private Integer id;
  3. private String userAddress; //用户地址
  4. private String userId; //用户id
  5. private String consignee; //收货人
  6. private String phoneNum; //电话号码
  7. private String isDefault; //是否为默认地址 Y-是 N-否
  8. //get set
  9. //有参构造 无参构造
  10. }

UserService

  1. //用户服务
  2. public interface UserService {
  3. /**
  4. * 按照用户id返回所有的收货地址
  5. * @param userId
  6. * @return
  7. */
  8. public List<UserAddress> getUserAddressList(String userId);
  9. }

UserServiceImpl

  1. public class UserServiceImpl implements UserService {
  2. public List<UserAddress> getUserAddressList(String userId) {
  3. UserAddress address1 = new UserAddress(1, "河南省郑州巩义市宋陵大厦2F", "1", "安然", "150360313x", "Y");
  4. UserAddress address2 = new UserAddress(2, "北京市昌平区沙河镇沙阳路", "1", "情话", "1766666395x", "N");
  5. return Arrays.asList(address1,address2);
  6. }
  7. }

创建Maven项目=> order-service-consumer 服务消费者(订单服务)

OrderService**

  1. public interface OrderService {
  2. /**
  3. * 初始化订单
  4. * @param userID
  5. */
  6. public void initOrder(String userID);
  7. }

OrderServiceImpl

因服务消费者要拿到提供者的方法

将**服务提供者中的实体类UserService**复制到当前消费者同级文件中

OrderServiceImpl

  1. public class OrderServiceImpl implements OrderService {
  2. public UserService userService;
  3. public void initOrder(String userID) {
  4. //查询用户的收货地址
  5. List<UserAddress> userAddressList = userService.getUserAddressList(userID);
  6. System.out.println(userAddressList);
  7. }
  8. }

此时我们调用userservice肯定是要报错的。这种面向接口的方式,我们这里只是调到了接口,而接口实际是在另外一个项目中,如果我们两个项目工程都创建共同的实体类,太过于麻烦了,我们可以将服务接口,服务模型等单独放在一个项目中,更为方便调用。

将提供者和消费者项目中的所有实体类复制到当前相关的文件包下,删除原有的实体类包及service包,也就是将实体类及service放在了当前公共的项目中。

把服务提供者和消费者项目中引入以下依赖,引入项目不再报错。

  1. <dependency>
  2. <groupId>com.lemon.gmail</groupId>
  3. <artifactId>gmail-interface</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </dependency>

服务提供者配置及测试

user-service-provider 服务提供者项目中引入依赖

  1. <!--dubbo-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <version>2.6.2</version>
  6. </dependency>
  7. <!--注册中心是 zookeeper,引入zookeeper客户端-->
  8. <dependency>
  9. <groupId>org.apache.curator</groupId>
  10. <artifactId>curator-framework</artifactId>
  11. <version>2.12.0</version>
  12. </dependency>

resource文件中创建provider.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
  7. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8. <!--1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)-->
  9. <dubbo:application name="user-service-provider"></dubbo:application>
  10. <!--2、指定注册中心的位置-->
  11. <!--<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>-->
  12. <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
  13. <!--3、指定通信规则(通信协议? 服务端口)-->
  14. <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
  15. <!--4、暴露服务 让别人调用 ref指向服务的真正实现对象-->
  16. <dubbo:service interface="com.lemon.gmail.service.UserService" ref="userServiceImpl"></dubbo:service>
  17. <!--服务的实现-->
  18. <bean id="userServiceImpl" class="com.lemon.gmail.service.impl.UserServiceImpl"></bean>
  19. </beans>

编写一个ProviderApplication启动类程序,运行测试配置

  1. public class MailApplication {
  2. public static void main(String[] args) throws IOException {
  3. ClassPathXmlApplicationContext applicationContext= new ClassPathXmlApplicationContext("provider.xml");
  4. applicationContext.start();
  5. System.in.read();
  6. }
  7. }

Dubbo环境搭建,创建提供者,消费者项目 - 图4
启动zookeeper注册中心的zkServer.cmd、和zkCli.cmd服务
在dubbo-admin target中cmd运行 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
再次启动项目,我们可以看到在zk中已经发现服务提供者。
Dubbo环境搭建,创建提供者,消费者项目 - 图5

服务提供者的配置和测试完成

服务消费者配置及测试

order-service-consumer 服务消费者项目中引入依赖

  1. <!--dubbo-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <version>2.6.2</version>
  6. </dependency>
  7. <!--注册中心是 zookeeper,引入zookeeper客户端-->
  8. <dependency>
  9. <groupId>org.apache.curator</groupId>
  10. <artifactId>curator-framework</artifactId>
  11. <version>2.12.0</version>
  12. </dependency>

创建consumer.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  8. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
  9. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  10. <!--包扫描-->
  11. <context:component-scan base-package="com.lemon.gmail.service.impl"/>
  12. <!--指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)-->
  13. <dubbo:application name="order-service-consumer"></dubbo:application>
  14. <!--指定注册中心的位置-->
  15. <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
  16. <!--调用远程暴露的服务,生成远程服务代理-->
  17. <dubbo:reference interface="com.lemon.gmail.service.UserService" id="userService"></dubbo:reference>
  18. </beans>

把当前OrderServiceImpl实现类中加上注解

  1. @Service
  2. public class OrderServiceImpl implements OrderService {
  3. @Autowired
  4. public UserService userService;
  5. public void initOrder(String userID) {
  6. //查询用户的收货地址
  7. List<UserAddress> userAddressList = userService.getUserAddressList(userID);
  8. //为了直观的看到得到的数据,以下内容也可不写
  9. System.out.println("当前接收到的userId=> "+userID);
  10. System.out.println("**********");
  11. System.out.println("查询到的所有地址为:");
  12. for (UserAddress userAddress : userAddressList) {
  13. //打印远程服务地址的信息
  14. System.out.println(userAddress.getUserAddress());
  15. }
  16. }
  17. }

编写一个ConsumerApplication启动类程序,运行测试配置

  1. public class ConsumerApplication {
  2. public static void main(String[] args) {
  3. ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
  4. OrderService orderService = applicationContext.getBean(OrderService.class);
  5. //调用方法查询出数据
  6. orderService.initOrder("1");
  7. System.out.println("调用完成...");
  8. System.in.read();
  9. }
  10. }

注意:消费者的运行测试需要先启动提供者。
启动服务提供者、消费者。及zookeeper的和dubbo-admin,查看监控信息。
localhost:7001
Dubbo环境搭建,创建提供者,消费者项目 - 图6

dubbo-monitor-simple简易监控中心

进入dubbo-monitor-simple文件,执行cmd命令,mvn package打包成jar包
Dubbo环境搭建,创建提供者,消费者项目 - 图7
Dubbo环境搭建,创建提供者,消费者项目 - 图8
将 dubbo-monitor-simple-2.0.0-assembly.tar.gz 压缩包解压至当前文件夹,解压后config文件查看properties的配置是否是本地的zookeeper。
打开解压后的 assembly.bin 文件,start.bat 启动dubbo-monitor-simple监控中心
Dubbo环境搭建,创建提供者,消费者项目 - 图9
在浏览器 localhost:8080 ,可以看到一个监控中心。
在服务提供者和消费者的xml中配置以下内容,再次启动服务提供和消费者启动类。

  1. <!--dubbo-monitor-simple监控中心发现的配置-->
  2. <dubbo:monitor protocol="registry"></dubbo:monitor>
  3. <!--<dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor>-->

Dubbo环境搭建,创建提供者,消费者项目 - 图10

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

Dubbo环境搭建,创建提供者,消费者项目 - 图11