Springboot+Dubbo-zookeeper学习笔记

一、调用关系说明

0. 服务容器负责启动、加载、运行服务提供者
1. 服务提供者在启动时,向注册中心注册自己提供的服务
2. 服务消费者在启动时,向注册中心订阅自己所需的服务
3. 注册中心返回服务提供者地址列表给消费者,如有变更,注册中心将基于长连接推送变更数据给消费者
4. 服务消费者从提供者地址列表中,基于软负载均衡算法选一台提供者进行调用,如果调用失败则再选一台调用
5. 服务提供者和消费者,在内存中累计调用次数和调用时间,定时每分钟向监控中心发送统计数据

二、Multicast注册中心简单整合springboot+dubbo

0. 项目总pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>springboot-dubbo-api</module>
        <module>springboot-dubbo-provider</module>
        <module>springboot-dubbo-consumer</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.ambition</groupId>
    <artifactId>springboot-dubbo-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <dubbo.version>2.7.3</dubbo.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

1. api模块 提供interface给provider实现以及给consumer引用
package cn.ambition.api.service;

import cn.ambition.api.dto.UserInfoDTO;

import java.rmi.RemoteException;

public interface UserService {

    /**
     * 查询用户信息
     * @param id
     * @return
     * @throws RemoteException
     */
    UserInfoDTO getUserInfo(Integer id) throws RemoteException;
}

2. provider 实现接口,并提供服务
<dependencies>
        <dependency>
            <groupId>cn.ambition</groupId>
            <artifactId>springboot-dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
package cn.ambition.provider.service;

import cn.ambition.api.dto.UserInfoDTO;
import cn.ambition.api.service.UserService;
import org.apache.dubbo.config.annotation.Service;

import java.rmi.RemoteException;
// 注意这个service引用的是dubbo下的
@Service(version = "1.0")
public class UserServiceImpl implements UserService {
    /**
     * 查询用户信息
     *
     * @param id
     * @return
     * @throws RemoteException
     */
    @Override
    public UserInfoDTO getUserInfo(Integer id) throws RemoteException {
        System.out.println("服务提供方收到请求,查询参数---->" + id);
        UserInfoDTO userInfoDTO = new UserInfoDTO();
        userInfoDTO.setId(id);
        userInfoDTO.setUserName("HHHHHH");
        return userInfoDTO;
    }
}

server:
  port: 8001

## dubbo 配置
dubbo:
  application:
    name: dubbo-provider
  ## 注册地址,这里使用的是广播的方式
  registry:
    address: multicast://224.5.6.7:1234
  ## 协议
  protocol:
    name: dubbo
    port: 20880
  ## 使用扫描包的方式批量注册,对应的@Service注解是dubbo包下的注解不要引用错了
  scan:
    base-packages: cn.ambition.provider.service
3. consumer通过dubbo注入远程bean,远程调用服务
<dependencies>
        <dependency>
            <groupId>cn.ambition</groupId>
            <artifactId>springboot-dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
package cn.ambition.consumer.controller;

import cn.ambition.api.dto.UserInfoDTO;
import cn.ambition.api.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.rmi.RemoteException;

@RestController
public class UserController {
    @Reference(version = "1.0", parameters = {"unicast","false"})
    private UserService userService;

    @GetMapping("/userInfo/{id}")
    public UserInfoDTO getUserInfo(@PathVariable Integer id) throws RemoteException {
        return userService.getUserInfo(id);
    }
}

server:
  port: 8002

dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: multicast://224.5.6.7:1234

在这里插入图片描述

三、zookeeper

https://dubbo.apache.org/zh/docs/references/registry/zookeeper/
Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。
在这里插入图片描述
流程说明:
服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
支持以下功能:
当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
当注册中心重启时,能自动恢复注册数据,以及订阅请求
当会话过期时,能自动恢复注册数据,以及订阅请求
当设置 <dubbo:registry check=“false” /> 时,记录失败注册和订阅请求,后台定时重试
可通过 <dubbo:registry username=“admin” password=“1234” /> 设置 zookeeper 登录信息
可通过 <dubbo:registry group=“dubbo” /> 设置 zookeeper 的根节点,不配置将使用默认的根节点。
支持 * 号通配符 <dubbo:reference group=“" version="” />,可订阅服务的所有分组和所有版本的提供者

1. 安装步骤
  • 下载安装包
[root@VM-8-2-centos bin]# wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
  • 解压
[root@VM-8-2-centos bin]# tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz 
  • 修改配置文件,创建文件夹 data和log
[root@VM-8-2-centos bin]# mv zoo_sample.cfg  zoo.cfg

在这里插入图片描述

  • 启动
[root@VM-8-2-centos bin]# ./zkServer.sh start
2. 新增依赖
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
3. 修改provider和consumer的注册地址
dubbo:
  application:
  registry:
    address: zookeeper://xxx.xxx.xxx.xxx:2181
4. 在zkcli中查看
[zk: localhost:2181(CONNECTED) 6] ls /dubbo/
Path must not end with / character
[zk: localhost:2181(CONNECTED) 7] ls /dubbo
[cn.ambition.api.service.UserService]
[zk: localhost:2181(CONNECTED) 8] ls /dubbo/cn.ambition.api.service.UserService 
[configurators, consumers, providers, routers]
[zk: localhost:2181(CONNECTED) 9] ls /dubbo/cn.ambition.api.service.UserService/providers 
5. 集群模式
  • 解压一份zk到新建的目录zk1
[root@VM-8-2-centos data]# mkdir zk1
[root@VM-8-2-centos data]# tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C zk1
  • 同样创建data和log文件夹,在data文件中写入文件 myid ,写个1
[root@VM-8-2-centos data]# vim myid
  • 修改配置文件zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/zookeeper/zk1/apache-zookeeper-3.6.3-bin/data
logDir=/home/zookeeper/zk1/apache-zookeeper-3.6.3-bin/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
#server.1 中的1 是myid中写的值,2888 2889 2890用于集群内部通讯,3888 3889 3890 用于选举leader
server.1=10.0.8.2:2888:3888
server.2=10.0.8.2:2889:3889
server.3=10.0.8.2:2890:3890

  • 复制两份
[root@VM-8-2-centos zookeeper]# cp -Rf zk1/ zk2
[root@VM-8-2-centos zookeeper]# cp -Rf zk1/ zk3
  • 分别修改myid、dataDir、logDir和端口号
  • 启动三个服务
[root@VM-8-2-centos conf]# cd /home/zookeeper/
Using config: /home/zookeeper/zk1/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-8-2-centos zookeeper]# ./zk2/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zk2/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM-8-2-centos zookeeper]# ./zk3/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zk3/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

  • 查看三个服务各自的状态
[root@VM-8-2-centos zookeeper]# ./zk1/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zk1/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@VM-8-2-centos zookeeper]# ./zk2/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zk2/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
[root@VM-8-2-centos zookeeper]# ./zk3/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zk3/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower

  • 修改application.yml配置
dubbo:
  registry:
    address: zookeeper://175.178.174.201:2182?backup=175.178.174.201:2181,175.178.174.201:2183
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值