dubbo入门学习笔记之入门demo(基于普通maven项目)


  注:本笔记接dubbo入门学习笔记之环境准备继续记录;

  (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务

  需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订单服务与用户服务分别部署在不同的服务器)

  思路:1、基于官网的dubbo服务化最佳实践,我们开发一个入门级demo可以先开发一个公共的接口层,然后服务提供者和服务消费者分别引用该接口的依赖

     2、本例中我们需要新建一个公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口

       3、新建服务提供者和消费者的项目分别引入pub-interfence依赖并实现对应接口

       4、进行整合dubbo的相关配置,测试服务提供者和消费者是否成功向注册中心注册和订阅

  (1)新建公共接口层的maven项目pub-interfence,定义查询用户信息的接口和初始化订单的接口,关键代码如下:

/**
 * 订单服务相关接口
 */
public interface OrderService {
    
    /**
     * 初始化订单
     * @param userId
     */
    List initOrder(String userId);

}
/**
 *   @author 董琳琳
 *   @date 2018/9/14 11:38
 *   @description   用户服务相关接口
 */
public interface UserService {

    /**
     * 获取用户信息
     * @param userId
     * @return
     */
    List getUserList(String userId);
}

  (2)新建服务提供者user-service-provider引入pub-interfence并向注册中心注册,关键代码如下:

  pom.xml:  

<?xml version="1.0" encoding="UTF-8"?>

    4.0.0

    com.darling.dubboDemo
    user-service-provider
    1.0-SNAPSHOT


    
        
        
            com.darling.dubboDemo
            pub-interfence
            1.0-SNAPSHOT
        

        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        

    


  UserServiceImpl:
/**
 *   @author 董琳琳
 *   @date 2018/9/28 10:24
 *   @description   用户服务的实现类 这里用来向订单服务提供相关服务
 */
public class UserServiceImpl implements UserService {

    /**
     * 查询用户信息(这里为订单服务的初始化订单接口提供服务)
     * @param userId
     * @return
     */
    @Override
    public List getUserAddressList(String userId) {
        List list = new ArrayList();
        list.add(new User(3,"韦德","男",36,"迈阿密"));
        list.add(new User(23,"詹姆斯","男",34,"洛杉矶"));
        list.add(new User(24,"科比","男",39,"洛杉矶"));
        return list;
    }
}

   在项目的resource目录下新建provider.xml整合dubbo:



    
    

    
    

    
    

    
    

    
    

    
    
    
    
    

  至此一个简单的服务提供者算是搭建完毕了,下面通过spring来加载 配置文件,测试是否成功向注册中心注册了,测试代码如下:

/**
 *   @author 董琳琳
 *   @date 2018/9/14 14:51
 *   @description  测试服务提供者(用户服务)向注册中心注册是否成功
 */
public class TestProviderDemo {

    public static void main(String[] args) throws IOException {
        // 加载配置文件
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
        // 容器启动
        applicationContext.start();
        // 使程序阻塞(由于是单元测试,如果程序跑完了我们再dubbo控制台看不到效果)
        System.in.read();
    }
}

   如果一切顺利的话,打开dubbo-admin的首页点击服务治理==>应用将会看到:

  (3)新建服务消费者order-service-consumer引入pub-interfence并向注册中心订阅服务,关键代码如下:

  pom.xml

<?xml version="1.0" encoding="UTF-8"?>

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

    com.darling
    order-service-consumer
    1.0-SNAPSHOT

    
        
        
            com.darling.dubboDemo
            pub-interfence
            1.0-SNAPSHOT
        
        
        
        
            com.alibaba
            dubbo
            2.6.2
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
    

   OrderServiceImpl:

/**
 *   @author 董琳琳
 *   @date 2018/9/14 11:50
 *   @description   订单服务的实现类
 */
@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    UserService userService;

    /**
     * 初始化订单并调用用户服务的接口
     * @param userId
     * @return
     */
    @Override
    public List initOrder(String userId) {
        return userService.getUserAddressList(userId);
    }
}

    在项目的resource目录下新建consumer.xml整合dubbo:

<?xml version="1.0" encoding="UTF-8"?>

       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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
    package="com.darling.order">
    
    

    
    

    
    interface="com.darling.pubIn.service.UserService" version="*"/>

    
    

   这样,一个简单的消费者也基本搭建完毕,接下来就是测试了,测试代码如下:

/**
 *   @author 董琳琳
 *   @date 2018/9/14 15:57
 *   @description 测试服务调用者是否成功从注册中心订阅服务
 */
public class TestConsumerDemo {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
        OrderService service = applicationContext.getBean(OrderService.class);
        List list = service.initOrder("1");
        for (User user:list) {
            System.out.println(user.toString());
        }
        System.in.read();
    }
}

   调用成功后控制台会打印UserServiceImpl中返回的用户信息,打开dubbo-admin首页点击服务治理==>应用,内容如下:

  至此,一个简单的通过dubbo进行服务间的调用的demo就全部搭建并测试完毕了,需要注意的是此demo中为了方便并没有连接数据库,数据都是写死的,后续会继续记录如何使用dubbo官网上的一些常用配置以及如何整合dubbo和springboot;

相关