之前一直使用webservice进行两个项目之间的接口调用,后来发现webservice接口的反应速度太慢。决定使用dubbo,在网上找了很多的案例,都是写的一个小demo。和项目集成不到一块,研究了好久,现在将dubbo与ssm集成到一块。
首先项目:pccw和pccw_portal以及pccw_api,在pccw和pccw_portal两个项目要互为接口提供方和消费方。这里的pccw_api主要用于存放接口类。
dubbo是需要用到zookeeper,这里就不讲zookeeper怎么安装使用了。
建立父项目将pccw,pccw_portal和pccw_api项目引入到父项目里面
新建pccw_api项目包结构如下
api里面存放的是接口服务,entity里面存放的是实体类entity
新建pccw项目添加dubbo依赖,并将pccw_api作为依赖加入到pccw项目中
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.6</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency>
在pccw项目src/main/resources下建立一个新文件夹,我这里叫spring
在Spring里面新增消费方配置文件dubbo-demo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<dubbo:consumer check="false" />
//扫描消费方所在的包
<dubbo:annotation package="com.starsoft.ezicloud.modules" />
</beans>
在Spring里面新增服务提供方配置文件dubbo-demo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="pccw"/>
<!-- 用dubbo协议在22882端口暴露服务 -->
<dubbo:protocol name="dubbo" port="22882"/>
<!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 使用注解方式暴露接口,扫描接口所在的包 -->
<dubbo:annotation package="com.pccw.dubbo.provider" />
</beans>
在spring-mvc.xml中引入配置文件
<import resource="classpath:spring\dubbo-demo-consumer.xml"/>
//接口里面会用到Spring的一些注解,所以添加Spring的扫描
<context:component-scan base-package="com.pccw.dubbo.provider"/>
<import resource="classpath:spring\dubbo-demo-provider.xml"/>
同理新建pccw_portal项目,添加dubbo依赖,并将pccw_api作为依赖引入到pccw_portal项目中
在pccw——项目src/main/resources下建立一个新文件夹,我这里叫spring
在Spring里面新增消费方配置文件dubbo-demo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<!-- <dubbo:application name="pccw_portal_consumer"/> -->
<!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<context:annotation-config />
<dubbo:consumer check="false" />
<!-- 消费方调用接口所在的包路径 -->
<dubbo:annotation package="com.starsoft.ezicloud.modules" />
</beans>
在Spring里面新增服务提供方配置文件dubbo-demo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="pccw_portal"/>
<!-- 用dubbo协议在21885端口暴露服务 -->
<dubbo:protocol name="dubbo" port="21885"/>
<!-- 使用zookeeper广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 使用注解方式暴露接口 -->
<!-- 服务提供者实现类所在的包路径 -->
<dubbo:annotation package="com.pccw_portal.dubbo.provider" />
</beans>
在spring-mvc.xml中引入配置文件
<import resource="classpath:spring\dubbo-demo-consumer.xml"/>
//接口里面会用到Spring的一些注解,所以添加Spring的扫描
<context:component-scan base-package="com.pccw_portal.dubbo.provider"/>
<import resource="classpath:spring\dubbo-demo-provider.xml"/>
到这里配置就已经完成了
下面是使用:在pccw_api中api包下新建接口类
package com.starsoft.ezicloud.api;
/**
* 接口服务
* @author 15311
*
*/
public interface DbInterfaceService {
/**
* 保存供应商
* @author suxl
*/
void saveSupplier(DbSupplier dbSupplier);
}
在pccw项目中com.pccw.dubbo.provider包下新建接口实现类实现api里面的接口
@Service(version="pccw")
public class DbInterfaceServiceImpl implements DbInterfaceService{
@Autowired
private DbSupplierService dbSupplierService;
@Override
public void saveSupplier(DbSupplier dbSupplier) {
Map<String, Object> variables=new HashMap<String,Object>();
System.out.println("进入pccw接口:保存供应商注册信息");
dbSupplierService.save(dbSupplier);
}
}
使用:通过pccw_portal项目调用pccw项目中的saveSupplier接口:
在pccw_portal项目中使用下面的方法即可调用pccw项目中的接口
import com.alibaba.dubbo.config.annotation.Reference;
@Component
@Controller
@RequestMapping(value = "${adminPath}/pccw_portal/dbSupplier")
public class DbSupplierController extends BaseController {
//使用dubbo的注解
@Reference(version="pccw")
private DbInterfaceService dbInterfaceService;
@RequiresPermissions("pccw:dbSupplier:edit")
@RequestMapping(value = "save")
public String save(DbSupplier dbSupplier, Model model, RedirectAttributes redirectAttributes) {
//调用pccw_portal项目中的接口saveSupplier
dbInterfaceService.saveSupplier(dbSupplier);
}
}
同理pccw调用pccw_portal,在pccw项目的com.pccw.dubbo.provider包下新建接口实现类实现api里面的接口
调用的时候需要:@Reference里面的pccw改为pccw_portal即可
@Reference(version="pccw")
private DbInterfaceService dbInterfaceService;
自己测试过,很好用!