初次接触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>

浙公网安备 33010602011771号