dubbo项目的配置
根据上一篇文章,我们已经创建好两项目一个xxx-common一个xxx-service并创建好相应的目录结构
开始配置配置文件内容
一、配置pom.xml 文件,
(1)payment-common的pom.xml文件配置
配置上使用的父项目或者建立上jar包依赖即可
(2)payment-service的pom.xml文件配置
配置上除了配置父项目以外还要配置对payment-common项目的依赖因为service要使用到common中的实体和接口工具类等。还有很重要的一个配置打包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dxl.payment</groupId>
<artifactId>payment-service</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.uz.dxt</groupId>
<artifactId>manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.dxl.payment</groupId>
<artifactId>payment-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dxl.util</groupId>
<artifactId>common-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build><!--打包配置 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.dxl.payment.main.Application</mainClass><!--配置启动项目的类-->
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
二、配置payment-service项目的resources中的配置文件
一般的ssm项目配置文件
1、配置applicationContext.xml 文件
特殊地方引入applicationContext_dubbo_zookeeper.xml
<import resource="applicationContext_dubbo_zookeeper.xml" />
2、配置jdbc.properties
3、mybatis.xml
4、log4j.properties
5、spring-mybatis-transaction.xml
dubbo atomikos分布式数据库事务组件相关配置文件 在applicationContext.xml中引用
1 applicationContext_dubbo_zookeeper.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.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="Adminuser" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<!-- 测试 -->
<dubbo:registry protocol="zookeeper" address="192.168.10.14:2181,192.168.10.17:2181,192.168.10.18:2181" />
<!--<dubbo:registry protocol="zookeeper" address="192.168.10.4:2181" />-->
<!-- 生产 -->
<!--<dubbo:registry protocol="zookeeper" address="10.27.78.162:2181,10.25.140.22:2181,10.27.81.154:2181" />-->
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20891" />
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 暴露给外部使用的接口-->
<!-- <dubbo:annotation package="com.call.service.Impl"/> -->
<dubbo:service interface="com.dxl.payment.service.payment.TRepaymentService" ref="tRepaymentService" timeout="300000"/>
</beans>
<dubbo:service interface="com.dxl.payment.service.payment.TRepaymentService" ref="tRepaymentService" timeout="300000"/>
这句话是代表暴露给外部的接口。interface是payment-common项目中定义的接口
ref是payment-service项目接口实现类的的名称在@Service("tRepaymentService")中声明的名称
示例:
payment-common的接口
package com.dxl.payment.service.payment;
import com.dxl.payment.model.payment.TRepayment;
import com.dxl.payment.service.base.BaseService;
import java.util.List;
public interface TRepaymentService extends BaseService<TRepayment> {
public List<TRepayment> selectAllRepayment(TRepayment tRepayment);
}
payment-service的接口实现类
package com.dxl.payment.service.payment.impl;
import com.dxl.payment.dao.payment.TRepaymentMapper;
import com.dxl.payment.model.payment.TRepayment;
import com.dxl.payment.service.TipsService;
import com.dxl.payment.service.base.impl.BaseServiceImpl;
import com.dxl.payment.service.payment.TRepaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.*;
@Service("tRepaymentService")
public class TRepaymentServiceImpl extends BaseServiceImpl<TRepayment>
implements TRepaymentService, TipsService<TRepayment> {
@Autowired
private TRepaymentMapper tRepaymentMapper;
private Format fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public boolean setTips(TRepayment t) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean removeTips(TRepayment t) {
// TODO Auto-generated method stub
return false;
}
@Override
public List<TRepayment> selectAllRepayment(TRepayment tRepayment) {
return tRepaymentMapper.selectAllRepayment(tRepayment);
}
}
dao层与sql正常写即可
在applicationContext_dubbo_zookeeper.xml中暴露出接口信息
<dubbo:service interface="com.dxl.payment.service.payment.TRepaymentService" ref="tRepaymentService" timeout="300000"/>
payment-common与payment-service相当于生产者。而其他web项目调用相当于消费者
使用dubbo项目的方法:
1首先必须确认dubbo项目已经暴露好接口
2在要调用dubbo项目的项目中配置spring-dubbo.xml
这里演示在其他项目的serivce中调用dubbo,由于web本身就对自身项目的service具有依赖关系所以此处将dubbo的配置文件放在service中。如果不想放在service可以直接在web中配置spring-dubbo.xml文件
spring-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="callphone-service123123"/>
<!--<dubbo:registry protocol="zookeeper" address="192.168.10.14:2181,192.168.10.17:2181,192.168.10.18:2181" check="false"/>-->
<!--<dubbo:registry protocol="zookeeper" address="192.168.10.4:2181" check="false"/>-->
<!-- <dubbo:registry protocol="zookeeper" address="192.168.10.14:2181,192.168.10.17:2181,192.168.10.18:2181" check="false"/> -->
<!--<dubbo:registry protocol="zookeeper" address="192.168.10.4:2181" check="false"/> -->
<!-- 测试 -->
<!--<dubbo:registry protocol="zookeeper" address="192.168.10.4:2181" check="false"/>-->
<dubbo:registry protocol="zookeeper" address="192.168.10.14:2181,192.168.10.17:2181,192.168.10.18:2181" check="false"/>
<!--<!– 生产 –>-->
<!--<dubbo:registry protocol="zookeeper" address="10.27.78.162:2181,10.25.140.22:2181,10.27.81.154:2181" check="false"/>-->
<!-- 要获取到的dubbo暴露的接口配置-->
<dubbo:reference id="tRepaymentService" interface="com.dxl.payment.service.payment.TRepaymentService" check="false"/>
</beans>
配置好之后,将payment-common项目编译成jar包,并添加到要使用的项目中示例此处将jar包添加到service项目中和web项目张
测试时可直接加入项目,如果要发布生产,需要将dubbo的payment-common项目jar包放到私库中引用,这样就确保了其他项目只能查看到common中暴露的接口而看不到具体的实现编码,从而使项目和逻辑分离。独立维护。
spring-dubbo.xml中配置的
<dubbo:reference id="tRepaymentService" interface="com.dxl.payment.service.payment.TRepaymentService" check="false"/>
是dubbo的消费者。配置此处可以使调用的payment-service使用到jdbc数据库等。
3测试
编写controller方法
@RequestMapping("/testPaymentDubbo")
@ResponseBody
public void testPaymentDubbo(){
TRepayment tRepayment=new TRepayment();
tRepayment.setCompanyCode("ceshilvsuo");
List<TRepayment> list=tRepaymentService.selectAllRepayment(tRepayment);
for (TRepayment t:list) {
System.out.println(t.toString());
}
}
自己测试时手动启动payment-service中的main层的application类的main方法启动dubbo生产者服务
注意运行时要保证payment-service项目和payment-common项目都编译install一遍之后
dubbo生产者已经启动了
可以用postman直接测试接口是否可用,dubug查看运行。
测试通过即成功完成