springboot整合dubbo,zookeeper实现简单的微服务

zookeeper

什么是zookeeper

zookeeper主要服务于分布式系统,使用类似于unix的文件系统管理模式(树状结构)来管理多个节点(znode),还使用监听器管理znode节点的数据变化和子节点的增减变化

应用场景

  1. 统一配置管理
    多个机器上面的配置大同小异时,将公共的配置放到zookeeper的znode节点中,系统A,B,C监听节点有没有做变更,有变更则及时响应,避免同时更改多个服务器配置文件所带来的麻烦
  2. 统一命名服务
    因为zookeeper树状结构实现,可以生成一些唯一的命名,统一命名服务的理解其实跟域名一样,是我们为这某一部分的资源给它取一个名字,别人通过这个名字就可以拿到对应的资源
  3. 分布式锁
    多个服务之间保证资源一致性需要分布式锁实现,
    多个系统访问的时候会创建带顺序号的临时/短暂(EPHEMERAL_SEQUENTIAL)节点,比如,系统A创建了id_000000节点,系统B创建了id_000002节点,系统C创建了id_000001节点。接着,拿到/locks节点下的所有子节点(id_000000,id_000001,id_000002),判断自己创建的是不是最小的那个节点
  • 如果是,则拿到锁。
    • 释放锁:执行完操作后,把创建的节点给删掉
  • 如果不是,则监听比自己要小1的节点变化
  1. 队列管理
    (4)队列管理
    两种类型的队列:
    1、 同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
    2、队列按照 FIFO 方式进行入队和出队操作。
    第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
    第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

dubbo

什么是dubbo

dubbo是一个分布式的服务调度框架,可以提供服务注册、服务发现、服务消费,
类似于springcloud的eruka等组件,将服务和消费者注册到注册中心,并用监控器监控所有服务,主要有

provider

用于暴露服务提供者的服务

consumer

用于消费服务提供者的服务

Registry

服务注册与发现的注册中心。

Monitor

统计服务的调用次调和调用时间的监控中心。

Container

服务运行容器。

买票服务示例

接口服务

接口单独实现一个model,provider和consumer都引入接口服务的依赖,就可以将所有接口单独管理,注意消费者和生产者的service方法路径得一致

public interface TicketService {
     String getTicket();
}

服务提供者

pom.xml
     <!--引入接口服务依赖-->
     <dependency>
            <groupId>com.wzb</groupId>
            <artifactId>service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
     <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

properties.yml

dubbo:
    application:
        name: dubbo_provider
    protocol:
        name: dubbo
        port: 20880
    registry:
        address: zookeeper://127.0.0.1:2181
        protocol: zookeeper
    scan:
        base-packages: com.wzb.provider.service
spring:
    application:
        name: dubbo_auto_configuration_provider_demo
server:
    port: 8080
service
//@Service使用的是dubbo的service注解
@Service(version = "1.0.0",interfaceClass = TicketService.class)
public class ProviderTicketService implements TicketService {

    @Override
    public String getTicket() {
        return "芳华";
    }
}

服务消费者

1.pom.xml文件和消费者一致
2.properties.yml如下

dubbo:
    application:
        name: dubbo_consumer
    registry:
        address: zookeeper://127.0.0.1:2181
        protocol: zookeeper
server:
    port: 8085

3.service


@Service
public class ConsumerTicketService {
    @Reference(version = "1.0.0",interfaceClass = TicketService.class)
    private TicketService ticketService;
    public String buyTicket(String user) {
        return "welcome "+ user+" to see "  + ticketService.getTicket();
    }
}

这样启用provider和consumer服务,将服务注册到zookeeper,并通过dubbo进行服务发现和调用,就可以实现一个简单的分布式调用
最后:调用 买票
结果如下图所示:
消费者调用结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值