初次接触Dubbo

Dubbo的概念:

  Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

Api

  存放服务提供者和服务消费者的公用Entity和service。

Provider
  暴露服务方称之为“服务提供者”。
Consumer
  调用远程服务方称之为“服务消费者”。
Registry
  服务注册与发现的中心目录服务称之为“服务注册中心”。
Monitor
  统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。
初次接触应用案例:
  数据源:全国集团用数据库、省公司用数据库
  应用:集团数据库每月下发省公司运营数据给到省公司数据库。省公司用户每月从集团数据库获取自己所需数据,保存至省公司数据库并删除已从集团数据库中取得的数据。
  服务提供者:提供服务包括1.获取集团数据库数据;2.删除集团数据库数据
  服务消费者:保存从集团数据库取到的数据,调用服务提供者删除功能
 
 api公用项目
公用方法接口 
DubboNjsjxxb.java 
 1 package com.dvt.snjs.dubbo.service;
 2 
 3 import java.util.List;
 4 
 5 import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;
 6 
 7 
 8 public interface DubboNjsjxxb {
 9     
10     public List<SyhsTmpNjsjxxbVo> getNjsjxx();
11     
12     public void doDeleteNjsjxx();
13 
14 }

公用entity 

SyhsTmpNjsjxxbVo.java
 1 package com.dvt.snjs.dubbo.model;
 2 
 3 import java.io.Serializable;
 4 
 5 public class SyhsTmpNjsjxxbVo implements Serializable{
 6     /**
 7      * 
 8      */
 9     private static final long serialVersionUID = -262370952182427661L;
10     private String qdid;
11     private String bz;
12     public String getQdid() {
13         return qdid;
14     }
15     public String getBz() {
16         return bz;
17     }
18     public void setQdid(String qdid) {
19         this.qdid = qdid;
20     }
21     public void setBz(String bz) {
22         this.bz = bz;
23     }
24 
25 }

 

provider


服务端接口

NjsjxxService.java
package com.dvt.snjs.service;

import java.util.List;
import org.springframework.jdbc.core.RowMapper;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;

public interface NjsjxxService {
    
    public RowMapper<SyhsTmpNjsjxxbVo> njsjxxRowMapper = (rs,i) -> {
        SyhsTmpNjsjxxbVo njsjxxbVo = new SyhsTmpNjsjxxbVo();
        njsjxxbVo.setQdid(rs.getString("qdid"));
        njsjxxbVo.setBz(rs.getString("bz"));
        return njsjxxbVo;
    };
    
    public List<SyhsTmpNjsjxxbVo> getNjsjxxList();
    
    public void deleteNjsjxxList();

}

服务端实现类

NjsjxxServiceImpl.java
package com.dvt.snjs.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import com.dvt.core.dao.springjdbc.GenericDao;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;
import com.dvt.snjs.service.NjsjxxService;

public class NjsjxxServiceImpl implements NjsjxxService{
    
    @Autowired
    private GenericDao genericDao;
    public GenericDao getGenericDao() {
        return genericDao;
    }
    public void setGenericDao(GenericDao genericDao) {
        this.genericDao = genericDao;
    }
    
    @Override
    public List<SyhsTmpNjsjxxbVo> getNjsjxxList(){
        String sql = "SELECT t.qdid,t.bz FROM syhs_tmp_njsjxxb t where 1 = 1";
        Map<String, Object> paramMap = new HashMap<String, Object>();
        return genericDao.getList(sql, paramMap, njsjxxRowMapper);
    }

    @Override
    public void deleteNjsjxxList() {
        String sql = "DELETE FROM syhs_tmp_njsjxxb WHERE 1 = 1 ";
        List<Object> paraList = new ArrayList<>();
        genericDao.updateSql(sql, paraList);
    }

}

公用接口实现类

DubboServiceNjsjxxImpl.java
package com.dvt.snjs.dubbo.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;
import com.dvt.snjs.dubbo.service.DubboNjsjxxb;
import com.dvt.snjs.service.NjsjxxService;

public class DubboServiceNjsjxxImpl implements DubboNjsjxxb{
    
    @Autowired
    private NjsjxxService njsjxxService;
    public NjsjxxService getNjsjxxService() {
        return njsjxxService;
    }
    public void setNjsjxxService(NjsjxxService njsjxxService) {
        this.njsjxxService = njsjxxService;
    }

    @Override
    public List<SyhsTmpNjsjxxbVo> getNjsjxx() {
        System.out.println("snjs-provider-getNjsjxx");
        return njsjxxService.getNjsjxxList();
    }

    @Override
    public void doDeleteNjsjxx() {
        njsjxxService.deleteNjsjxxList();
    }

}

provider主函数

package dubbo.java.main;

import dubbo.java.main.JscppUtil;
/**
 * 服务端
 * @author zane
 *
 */
public class Main {

    public static void main(String[] args) {
        try {
            JscppUtil.loadConfig("/SystemRootContext.xml");
        } catch (Throwable e) {
            System.out.println("配置文件加载失败了!");
            System.out.println(e.getMessage());
            System.exit(-1);
        }
        while(true) {
            try {
                Thread.sleep(10*60*1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

service.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"
       >
    <bean id="njsjxxService" class="com.dvt.snjs.service.impl.NjsjxxServiceImpl" autowire="byName"/>
</beans>

dubbo-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-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        
    <dubbo:application name="snjs_provider" />  
    <dubbo:registry address="zookeeper://localhost:2181" />
    <dubbo:protocol name="dubbo" port="20880" />  
    
    <bean id="dubboNjsjxxb" class="com.dvt.snjs.dubbo.service.impl.DubboServiceNjsjxxImpl"  autowire="byName">
        <property name="njsjxxService" ref="njsjxxService"></property>
    </bean>
    <dubbo:service interface="com.dvt.snjs.dubbo.service.DubboNjsjxxb" ref="dubboNjsjxxb" retries="0" timeout="3600000"/>
</beans>

消费者consumer


 

消费者接口
NjsjxxbService.java
package com.dvt.snjs.service;

import java.util.List;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;

public interface NjsjxxbService {
    
    public void saveNjsjxxbList(List<SyhsTmpNjsjxxbVo> list);

}

接口实现类

NjsjxxbServiceImpl.java
package com.dvt.snjs.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import com.dvt.core.dao.springjdbc.GenericDao;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;
import com.dvt.snjs.service.NjsjxxbService;

public class NjsjxxbServiceImpl implements NjsjxxbService{
    
    @Autowired
    private GenericDao genericDao;
    public GenericDao getGenericDao() {
        return genericDao;
    }
    public void setGenericDao(GenericDao genericDao) {
        this.genericDao = genericDao;
    }

    @Override
    public void saveNjsjxxbList(List<SyhsTmpNjsjxxbVo> list) {
        String sql = "insert into syhs_tmp_njsjxxb_tmp(qdid,bz) "
                + "values(:qdid,:bz)";
        Map<String, Object> paramMap = new HashMap<>();
        try {
            for (int i = 0; i < list.size(); i++) {
                paramMap.clear();
                paramMap.put("qdid", list.get(i).getQdid());
                paramMap.put("bz", list.get(i).getBz());
                genericDao.updateSql(sql, paramMap);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

整个逻辑的线程

DataTask.java
package com.dvt.snjs.app;

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.dvt.snjs.dubbo.model.SyhsTmpNjsjxxbVo;
import com.dvt.snjs.dubbo.service.DubboNjsjxxb;
import com.dvt.snjs.service.NjsjxxbService;
import com.dvt.snjs.util.JscppUtil;

public class DataTask {public static Runnable t_njsj = ()->{
        DubboNjsjxxb dubboNjsjxxb = JscppUtil.getBean("dubboNjsjxxb", DubboNjsjxxb.class);
        NjsjxxbService njsjxxbService = JscppUtil.getBean("njsjxxbService", NjsjxxbService.class);
        while (true) {
            try {
                List<SyhsTmpNjsjxxbVo> njsjxxList = dubboNjsjxxb.getNjsjxx();
                System.out.println("取数据成功!");
                System.out.println(njsjxxList.size());
                if (njsjxxList != null && !njsjxxList.isEmpty()) {
                    System.out.println("进入保存!");
                    njsjxxbService.saveNjsjxxbList(njsjxxList);
                    System.out.println("保存成功!");
                    dubboNjsjxxb.doDeleteNjsjxx();
                }else {
                    System.out.println("njsjxxList为空!");
                    Thread.sleep(6000);
                }
            } catch (Exception e) {
                try {
                    Thread.sleep(6000);
                    System.out.println("程序异常了!");
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
        }
    };
}

消费者主函数

TestMain.java
package com.dvt.snjs.app;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.dvt.snjs.util.JscppUtil;
/**
 * 消费者
 * @author zane
 *
 */
public class TestMain {public static void main(String[] args) {
        log.info("程序启动");
        try {
            JscppUtil.loadConfig("/SystemRootContext.xml");
        } catch (Throwable e) {
            log.error("配置文件加载失败了");
            log.error(e.getMessage(), e);
            System.exit(-1);
        }
        DataTask.t_njsj.run();
        while(true) {
            log.info("程序运行中");
            try {
                Thread.sleep(10*60*1000);
            } catch (InterruptedException e) {
            }
        }
    }
}

service.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"
       >
    <bean id="njsjxxbService" class="com.dvt.snjs.service.impl.NjsjxxbServiceImpl" autowire="byName"/>
    
</beans>

dubbo-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://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
    <dubbo:application name="snjs_consumer" />  
    <dubbo:registry address="zookeeper://192.168.61.219:2181" />
    
    <dubbo:reference id="dubboNjsjxxb" interface="com.dvt.snjs.dubbo.service.DubboNjsjxxb" />
    
</beans>

 

 
 
 
 
 
 
 
 
 
posted @ 2017-08-25 23:56  wleyang  Views(180)  Comments(0)    收藏  举报