Apache ZooKeeper
通过当前页面下载Zookeeper
在这里启动zookeeper
可以根据这个页面简单学习一下,但是没有集成mysql,也会出现一些报错,且在这之后我们要使用的管理页面是vue的dubbo-admin
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。-阿里云开发者社区
图文并茂,万字长文!彻底搞清楚Spring Boot 整合Dubbo+Zookeeper【分布式实战】 - 知乎
这是我的模块设计,在设计各个模块的内容之前,先通过github获取dubbo的管理界面
通过GitHub拉取该项目apache/dubbo-admin: The ops and reference implementation for Apache Dubbo
dubbon-admin-ui的vue项目通过vscode启动的视图页面来管理dubbo的项目
npm install
下载node_modules
如果报错应该是node的版本不对,如果安装了nvm可以通过nvm切换至16.x.x版本
npm run dev
启动项目
通过root/root登录dubbo-admin
先启动zookeeper
需要使用这个视图页面来管理dubbo的项目,我们还得启动拉取项目中的dubbo-admin-server模块并先更新完pom.xml中的依赖,maven的版本等等基本项也得改掉,之后启动项目成功便能使用这个视图页面来管理dubbo的项目
根据我的模块设计,我们开始对项目进行架构设计
先引入我们需要的总依赖
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>3.2.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>4.3.0</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-mock-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.3.0</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
这里的依赖总的划分一下的话如下图所示
实例
pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 1L; // 显式定义
private Long id;
private String name;
}
service
public interface UserService extends IService<User> {}
实例
控制类
@RestController
@RequestMapping("/user")
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Reference(timeout = 5000, retries = 1, check = true)
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable("id") Long id) {
log.info("调用远程服务,用户ID: {}", id);
User user = userService.getById(id);
if (user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(user);
}
}
yml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo?useSSL=false&serverTimezone=UTC
username: root
password: 20050101
driver-class-name: com.mysql.cj.jdbc.Driver
application:
name: dubbo-consumer
dubbo:
application:
name: dubbo-consumer # 消费者应用名称
qos-enable: false # 禁用 QoS(可选)
registry:
address: zookeeper://127.0.0.1:2181 # 注册中心地址(ZooKeeper)
# 如果使用 Nacos 注册中心,可以配置为:
# address: nacos://127.0.0.1:8848
protocol:
name: dubbo # 使用的协议类型
port: 20882 # 消费者端口(通常不需要配置,Dubbo 会自动分配)
consumer:
check: false # 是否在启动时检查服务提供者是否存在
timeout: 3000 # 调用超时时间(单位:毫秒)
retries: 2 # 调用失败时的重试次数
loadbalance: random # 负载均衡策略(random、roundrobin、leastactive 等)
cluster: failover # 集群容错策略(failover、failfast、failsafe 等)
实例
mapper
@Mapper
public interface UserMapper extends BaseMapper<User> {}
impl
@DubboService
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {}
启动类
@EnableDubbo
@SpringBootApplication
public class UserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceProviderApplication.class, args);
}
}
yml
server:
port: 20881
spring:
datasource:
url: jdbc:mysql://localhost:3306/dubbo?useSSL=false&serverTimezone=UTC
username: root
password: 20050101
driver-class-name: com.mysql.cj.jdbc.Driver
application:
name: dubbo-provider
dubbo:
application:
name: dubbo-provider
qos-enable: true
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20880
启动后可以在服务关系中看见他们模块之间的关系
也可以去调用接口测试接口的使用