1. 官方文档
2. 使用
-
dubbo
依赖-
对于
提供者
,只需要依赖spring-cloud-starter-dubbo
即可<!-- dubbo --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
-
对于
消费者
,还需要依赖spring-boot-starter-actuator
<!-- 健康监测 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- dubbo --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
-
无论是消费者还是提供者,都需要注册,消费者才可以将提供者的信息拉取到本地
<!-- nacos 注册中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
父依赖
<properties> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> <spring-cloud.version>Hoxton.SR3</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <!-- spring-cloud-dependencies --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring-cloud-alibaba-dependencies --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
spring-boot-starter-parent
、spring-cloud-dependencies
、spring-cloud-alibaba-dependencies
的版本要参考ali
推荐的毕业版本,否则,dubbo
很有可能跑不起来。参考依赖
-
-
提供者
的配置文件以及启动类-
主配置文件
application.yml
server: # 应用的端口号 port: 8181 spring: profiles: # 将 application-dubbo.yml 注册,使配置文件生效,有多个文件用 , 隔开 active: dubbo application: # 注册到 nacos 注册中心的服务名 name: movies-image cloud: nacos: discovery: enabled: true # nacos 注册中心的地址 server-addr: 120.25.207.44:8848 cluster-name: ${spring.application.name}
nacos
的相关配置也可以抽取出去解耦
-
dubbo
的配置文件application-dubbo.yml
,可以放到主配置文件中dubbo: scan: # 必须放在最前面 # dubbo 服务扫描基准包 # 一定是使用了 dubbo 注解的包 base-packages: com.sheng.dubbo.servies.impl protocol: # dubbo 协议、http 协议、Hessian 协议、thrift 协议、RMI # 使用 dubbo 协议 name: dubbo # dubbo 协议端口 # -1 表示自增端口,从 20880 开始 port: -1 registry: # 注册中心的地址 # 注册中心://注册中心ip:注册中心端口 address: nacos://120.25.207.44:8848 cloud: # 订阅的服务,默认为 * 订阅所有服务,不写上会一直有 warn 警告,而且耗费资源 subscribed-services:
-
启动类可以使用
@EnableDubbo
注解标记,有可能出错
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-
-
消费者
的配置文件-
主配置文件
application.yml
server: port: 8184 spring: profiles: active: dubbo application: name: web-service cloud: nacos: discovery: enabled: true server-addr: 120.25.207.44:8848 cluster-name: ${spring.application.name}
-
dubbo
配置文件application-dubbo.yml
dubbo: # 必须写在最前面,dubbo 服务扫描的基准包 scan: # 一定要写使用了 dubbo 相关注解的包 base-packages: com.sheng.dubbo.controller protocol: name: dubbo port: -1 registry: address: nacos://120.25.207.44:8848 # 禁止注册到注册中心,只订阅 register: false cloud: # 订阅的服务,一般为注册到注册中心的服务名 # 多个服务之间用 , 隔开 subscribed-services: movies-image,movies-service,movies-type
-
启动类可以使用
@EnableDubbo
注解标记,有可能出错
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-
-
dubbo
的使用-
提供者
注意:
@Service
,使用的是org.apache.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.sheng.dubbo.common.StatusCodeEnum; import com.sheng.dubbo.commons.domain.dto.ImageDto; import com.sheng.dubbo.commons.service.ImageService; import com.sheng.dubbo.domain.entity.Image; import com.sheng.dubbo.mapper.ImageMapper; import com.sheng.dubbo.utils.CopyBeanUtils; import com.sheng.dubbo.utils.JudgeEmptyUtils; import org.apache.dubbo.config.annotation.Service; import javax.annotation.Resource; import java.util.List; /** * 说明:@Service 是 org.apache.dubbo.config.annotation.Service; * * @author sheng */ @Service public class ImageServiceImpl implements ImageService { @Resource private ImageMapper imageMapper; @Override public List<ImageDto> findImageByFilmId(String id) throws Exception { int filmId = Integer.parseInt(id); // 判断 id 是否正常 JudgeEmptyUtils.judge(filmId < 1, StatusCodeEnum.PARAMS_IS_INVALID); // 拼接查询条件 QueryWrapper<Image> wrapper = new QueryWrapper<>(); wrapper.eq(Image.COL_FILM_ID, filmId); List<Image> images = imageMapper.selectList(wrapper); // 转化为 dto return CopyBeanUtils.copy(images, ImageDto.class); } }
-
消费者的调用
注意:
@Reference
,使用的是org.apache.dubbo.config.annotation.Reference;
import com.sheng.dubbo.common.ResultBean; import com.sheng.dubbo.common.StatusCodeEnum; import com.sheng.dubbo.commons.domain.dto.FilmDto; import com.sheng.dubbo.commons.domain.dto.ImageDto; import com.sheng.dubbo.commons.domain.dto.TypeDto; import com.sheng.dubbo.commons.service.FilmService; import com.sheng.dubbo.commons.service.ImageService; import com.sheng.dubbo.commons.service.TypeService; import com.sheng.dubbo.domain.vo.HomeVo; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 说明:@Reference 是 org.apache.dubbo.config.annotation.Reference; * * @author sheng */ @RestController @RequestMapping("/test") public class TestController { @Reference private FilmService filmService; @Reference private ImageService imageService; @Reference private TypeService typeService; @GetMapping("/test") public ResultBean<HomeVo> test() throws Exception { // 查询 List<FilmDto> filmDtoList = filmService.findFilmByTypeId("1"); List<ImageDto> imageDtoList = imageService.findImageByFilmId("1"); List<TypeDto> typeDtoList = typeService.findAll(); // 封装信息 HomeVo homeVo = new HomeVo(); homeVo.setFilmDtoList(filmDtoList); homeVo.setImageDtoList(imageDtoList); homeVo.setTypeDtoList(typeDtoList); return ResultBean.success(StatusCodeEnum.SUCCESS, homeVo); } }
-
查看
nacos
注册中心是否成功注册,是够能成功调用
-