Dubbo+Zookeeper

发布于:2025-03-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

Snipaste_2025-03-05_20-09-43.png

Apache ZooKeeper

通过当前页面下载Zookeeper

Snipaste_2025-03-05_20-56-27.png

Snipaste_2025-03-05_21-12-37.png

在这里启动zookeeper

可以根据这个页面简单学习一下,但是没有集成mysql,也会出现一些报错,且在这之后我们要使用的管理页面是vue的dubbo-admin

dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。-阿里云开发者社区

图文并茂,万字长文!彻底搞清楚Spring Boot 整合Dubbo+Zookeeper【分布式实战】 - 知乎

Snipaste_2025-03-05_21-08-47.png

这是我的模块设计,在设计各个模块的内容之前,先通过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
Snipaste_2025-03-05_22-25-34.png

先启动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>

这里的依赖总的划分一下的话如下图所示

Snipaste_2025-03-05_21-38-16.png

Snipaste_2025-03-05_21-42-08.png

实例

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> {}

Snipaste_2025-03-05_21-48-29.png

实例
控制类

@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 等)

Snipaste_2025-03-05_22-06-29.png

实例

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

Snipaste_2025-03-05_22-23-11.png

启动后可以在服务关系中看见他们模块之间的关系
也可以去调用接口测试接口的使用

Snipaste_2025-03-05_22-25-34.png


网站公告

今日签到

点亮在社区的每一天
去签到