1、pom.xml中添加dubbo相关的依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.2.0.RELEASE</spring.version>
<dubbo.version>2.6.1</dubbo.version>
</properties>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--dubbo-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
2、dubbo服务的注册中心zookeeper的安装和启动
下载地址:http://mirrors.cnnic.cn/apache/zookeeper
参考博文:https://blog.youkuaiyun.com/tlk20071/article/details/52028945
3、对原有的Maven项目进行重构
重构之后的目录结构如下:
大体上可以拆分为API,BOOT,SERVICE,WEB等几个模块
具体为什么要分模块,以及各个模块的具体作用,可以参考博文:
https://crossoverjie.top/2017/03/04/SSM10/
4、对外提供服务
基于SSM-demo的项目来说,
首先第一步:
在SSM-DEMO-API模块中定义一个接口,例如:
package com.bsk.api;
import com.bsk.dto.UserInfoReq;
import com.bsk.dto.UserInfoRsp;
public interface UserInfoApi {
/**
* 获取用户信息
*
* @param userInfoReq
* @return
* @throws Exception
*/
UserInfoRsp getUserInfo(UserInfoReq userInfoReq) throws Exception;
}
第二步:在SSM-DEMO-SERVICE模块中实现该接口
package com.bsk.api.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.bsk.api.UserInfoApi;
import com.bsk.api.dubbo.entity.T_user;
import com.bsk.api.dubbo.service.T_UserService;
import com.bsk.api.dubbo.util.CommonUtil;
import com.bsk.dto.UserInfoReq;
import com.bsk.dto.UserInfoRsp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@Service
public class UserInfoApiImpl implements UserInfoApi {
private static Logger logger = LoggerFactory.getLogger(UserInfoApiImpl.class);
@Autowired
private T_UserService t_userService ;
/**
* 获取用户信息
*
* @param userInfoReq
* @return
* @throws Exception
*/
@Override
public UserInfoRsp getUserInfo(UserInfoReq userInfoReq) throws Exception {
logger.info("用户查询Id="+userInfoReq.getId());
//返回对象
UserInfoRsp userInfoRsp = new UserInfoRsp() ;
T_user t_user = t_userService.selectByPrimaryKey(userInfoReq.getId()) ;
//构建
buildUserInfoRsp(userInfoRsp,t_user) ;
return userInfoRsp;
}
/**
* 构建返回
* @param userInfoRsp
* @param t_user
*/
private void buildUserInfoRsp(UserInfoRsp userInfoRsp, T_user t_user) {
if (t_user == null){
t_user = new T_user() ;
}
CommonUtil.setLogValueModelToModel(t_user,userInfoRsp);
}
}
其中值得注意的一点是这里使用的dubbo
框架所提供的@service
注解。该注解的作用是声明需要暴露的服务接口。
第三步:在项目中添加几个dubbo相关的配置文件
目录结构如下:
其中,spring-dubbo-config.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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="ssm-demo-service" owner="bsk"
organization="ssm-demo-bsk" logger="slf4j"/>
<dubbo:registry id="dubbo-registry" address="zookeeper://192.168.36.1:2181"
file="/tmp/dubbo.cachr" />
<dubbo:monitor protocol="registry" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:provider timeout="15000" retries="0" delay="-1" />
<dubbo:consumer check="false" timeout="15000" />
</beans>
这是配置我们服务注册的zk地址,端口号,以及服务名称、超时时间等配置信息。
spring-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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:reference id="userInfoApi"
interface="com.bsk.api.UserInfoApi" />
</beans>
这里是服务消费者配置项,表明我们需要依赖的其他应用。
比如在这依赖注入了com.bsk.api.UserInfoApi这个应用,。
spring-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-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:annotation package="com.bsk.api.impl" />
</beans>
这里是服务提供者配置项,配置dubbo扫描注解包的位置,一般配置到接口实现包即可。
5、安装管理控制台
安装管理控制台后,就可以看到我们有多少服务、调用情况是怎么样等作用。
具体的安装过程,参考博文:
https://blog.youkuaiyun.com/noob_hen/article/details/81200143
需要注意一点的是:
需要将其中的dubbo.properties
的zk地址修改为自己的服务器的IP地址,
如果Tomcat启动的服务比较多的情况下,建议自行修改端口号。
我这里修改了端口号为8088
其中我们可以看到有三个服务以及注册上去了,但是有两个没有消费者,还有一个状态正常,表示有消费者对该服务进行了消费。
注意:项目启动顺序,首先启动zookeeper客户端进程,然后启动服务提供者的功能模块,再次启动服务消费者的功能模块,最后启动dubbo-admin管理控制台程序对我们所发布的服务进行管理。
参考博文:https://crossoverjie.top/2017/04/07/SSM11/