Zookeeper安装
云服务器搭建五:linux安装Zookeeperhttps://www.jianshu.com/p/992ce53f26a9
一、搭建SpringBoot项目
二、整合Dubbo
- 在父级pom文件引入dubbo和zk依赖
<!--springboot整合dubbo-->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion> <!--此处排除掉低版本的dubbo依赖-->
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</exclusion>
<exclusion> <!--排除低版本zookeeper依赖-->
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--dubbo-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
<!--排除javassist防止与spring data jpa中冲突-->
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--zookeeper-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
- 在服务提供者resources加入yml配置
spring:
#发布应用程序配置
application:
name: zhg-dubbo-provider
dubbo:
application:
name: zhg-dubbo-provider #别名,提供方应用信息,用于计算依赖关系
registry:
address: zookeeper://47.107.105.158:2181 #使用zookeeper注册中心暴露服务地址
protocol:
name: dubbo
port: -1 #配置暴露服务端口
scan: com.zhg.service #扫描需要暴露的服务
- 在消费者resources中添加yml配置
spring:
application:
name: zhg-dubbo-consumer
dubbo:
application:
name: zhg-dubbo-consumer #别名,消费方应用信息,不要与提供方相同
registry:
address: zookeeper://47.107.105.158:2181 #注册中心地址,调用服务
scan: com.zhg.api #dubbo注解扫描
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
三、使用和测试
- 在业务实现接口实现类中加入@Service注解(注意:是引入com.alibaba.dubbo.config.annotation.Service)
package com.zhg.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.zhg.common.responseResult.ResponseResult;
import com.zhg.dao.UserDao;
import com.zhg.pojo.User;
import com.zhg.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
@Service(version = "1.0")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public ResponseResult findUserByName(String name) {
try{
User user = userDao.findByName(name).orElse(null);
return ResponseResult.success(user);
}catch (Exception e){
return ResponseResult.failure(e.getMessage());
}
}
}
- 在消费者使用@Reference注解调用服务提供者的接口
package com.zhg.api;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zhg.common.fastDFS.FastDFSClient;
import com.zhg.common.responseResult.ResponseResult;
import com.zhg.pojo.User;
import com.zhg.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/user")
@Api(value = "/user", tags = { "测试接口user" })
public class UserControll {
@Reference(version = "1.0",timeout = 6000)
private UserService userService;
@ApiOperation(value = "通过用户名查询用户信息", response = User.class, httpMethod = "GET", notes = "通过用户名查询用户信息")
@RequestMapping(value = "/find",method = RequestMethod.GET)
public ResponseResult findByName(String name){
return userService.findUserByName(name);
}
@ApiOperation(value = "上传文件", response = User.class, httpMethod = "POST", notes = "上传文件")
@RequestMapping(value = "/upload",method = RequestMethod.POST)
public ResponseResult findByName(@RequestParam("file")MultipartFile file){
try{
FastDFSClient fast = new FastDFSClient();
String fileAbsolutePath = fast.uploadFile(file.getBytes(),file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1));
return ResponseResult.success(fileAbsolutePath);
}catch (Exception e){
return ResponseResult.failure(e.getMessage());
}
}
}
-
先启动提供者,然后启动消费者,测试接口
image.png -
使用dubbo管理页面查看
Dubbo的管理控制台dubbo-admin https://blog.csdn.net/qq_28988969/article/details/79866111
四、注意
1.服务调用时出现java.io.Serializable
服务调用异常-解决方案
实体类序列化2.启动消费者出现数据库相关驱动加载失败等问题
异常-解决方案 排除引入其它模块无关的jar(数据库、jpa、mybatis等)
<!--引入接口模块-->
<dependency>
<groupId>com.zhg</groupId>
<artifactId>interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</exclusion>
<exclusion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</exclusion>
</exclusions>
</dependency>
实例参考demo:https://github.com/YoungAdmin/springbootdemo-dubbo.git
网友评论