dubbo需要额外的注册中心,其实也可以配置直连,但是那也没有意义了,支持几种注册中心但是推荐还是zookeeper
这里就不说怎么搭建zookeeper了,去官网下载一个 然后在conf目录下新建zoo.cfg文件 至于内容可以复制zoo_sample.cfg 只需要修改一下里面数据存储的目录即可
启动zookeeper,进入bin目录下如果是Windows执行zkServer.cmd,liunx就是zkServer.sh 这是启动zookeeper服务,至于客户端可以用zkCli.sh或cmd
dubbo就是把所有的接口(服务)采用统一声明管理,建一个工程,里面创建别的模块所需要的service接口和相关的实体类
命名为dubbo-api 然后在别的模块中引入这个工程
maven依赖如下
1 <dependency> 2 <groupId>com.tqq</groupId> 3 <artifactId>dubbo-api</artifactId> 4 <version>1.0-SNAPSHOT</version> 5 </dependency> 6 <!-- Dubbo Spring Boot Starter --> 7 <dependency> 8 <groupId>org.apache.dubbo</groupId> 9 <artifactId>dubbo-spring-boot-starter</artifactId> 10 <version>2.7.5</version> 11 </dependency> 12 <!-- zookeeper client依赖 --> 13 <dependency> 14 <groupId>com.101tec</groupId> 15 <artifactId>zkclient</artifactId> 16 <version>0.10</version> 17 </dependency> 18 <dependency> 19 <groupId>org.apache.curator</groupId> 20 <artifactId>curator-recipes</artifactId> 21 <version>2.13.0</version> 22 </dependency>
dubbo集成spring boot其实都有两种,因为现在最新的dubbo都捐赠给了Apache,而之前是属于alibaba的一个项目
我这里用得是最新的Apache的dubbo,不过两种其实一样,只不过Apache版本的包名已经不同了并且也包括了alibaba版本的 只不过会显示已过时
接下来就是application.propperties的配置,都是dubbo必须的配置
dubbo.application.name=order-service #应用名
dubbo.registry.address=127.0.0.1:2181 #注册中心地址
dubbo.registry.protocol=zookeeper #注册中心类型
dubbo.protocol.name=dubbo #服务间调用协议 支持多种协议
dubbo.protocol.port=20882 #服务间调用端口
接下来就是常规操作 在启动类上加一个
@EnableDubbo(scanBasePackages = "包路径") 开启dubbo支持 并扫描指定包下的接口
到这里 基本的dubbo工程已经搭建好了 接下来就是怎么暴露一个接口(服务)给其他应用使用
import org.apache.dubbo.config.annotation.Service; import java.util.Arrays; import java.util.List; /** * @Description: TODO * @Author: Tan * @CreateDate: 2020/3/18 **/ @Service public class UserServiceImpl implements UserService { @Override public List<UserAddress> queryUserAddressByUserId(String userId) { UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y"); UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N"); return Arrays.asList(address1,address2); } }
这是一个接口的实现类,至于这个接口是定义在上面的dubbo-api项目中,返回的实体类也是
将这个接口暴露出去,给别的应用调用,只需要加上一个@Service注解即可,注意这个注解是
org.apache.dubbo.config.annotation.Service; 而不是Spring的@Service注解
接口暴露出来,我想在别的模块要怎么引用呢?
package com.tqq.service; import com.tqq.entity.UserAddress; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; import java.util.List; /** * @Description: TODO * @Author: Tan * @CreateDate: 2020/3/18 **/ @Service public class OrderServiceImpl implements OrderService { @Reference() UserService userService; @Override public List<UserAddress> queryUserAddressByUserId(String userId) { return userService.queryUserAddressByUserId(userId); } }
这里同样是一个接口实现类,接口也定义在dubbo-api项目,
这里我这个接口不对外暴露所以我这里使用得是Spring的@Service注解
而不是dubbo的,我在这个里面需要调用我刚刚暴露的这个,只需要像常规
使用交由Spring管理的对象一样 直接注入进来即可 但是要使用
@Reference注解,这个注解可以定义一些功能比如调用的超时时间,重试次数等
关于dubbo的详细配置 可以参考dubbo官网,只要是xml能配置的在这个注解里面都能配
或者在application.propperties配置文件里面配置
基本上的配置就是这样 接下来就是关于dubbo的一些 服务降级 熔断 负载均衡的配置
这里要使用一个dubbo-admin 是官方提供的一个web管理界面,方便我们查看服务,操作服务等
这个去dubbo官网也可以下载源码进行打包 这里就不说了