SpringBoot+Dubbo+zookeeper实战

1.Dubbo的架构图

首先介绍一下这五个节点的角色(五个圆角矩形框)

  • Provider:暴露服务的服务提供方
  • Consume:调用远程服务的服务消费方

  • Registry:服务注册与发现的注册中心

  • Monitor:统计服务的调用次数和调用时间的监控中心

  • Container:服务运行容器

再来看一下调用的关系和流程:

  • ① 服务容器负责启动,加载,运行服务提供者

  • ② 服务提供者在启动时,向注册中心注册自己提供的服务

  • ③ 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

  • ④ 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用

  • ⑤ 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

2.第一个Dubbo案例

电影票订票

为了在一台机器上演示,首先创建了一个Maven的空项目,然后分别创建两个子模块:用户服务(服务提供者)provider-server,订单服务(服务消费者)consumer-server

2.1 创建用户服务(服务提供者)

在空项目中创建第一个模块provider-server

创建业务层接口及实现类

业务层接口:TicketService

package com.kuang.service;

public interface TicketService {
    public String getTicket();
}

业务层实现类:TicketServiceImpl

package com.kuang.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

// zookeeper 服务注册与发现
// 可以被扫描到,在项目一启动就能自动注册到注册中心
@Service // 暴露服务
// 使用了dubbo后尽量不要有service注解
@Component
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《大决战》";
    }
}

application.properties

server.port=8001

# 服务应用名字
dubbo.application.name=provider-server
# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 哪些服务要被注册
dubbo.scan.base-packages=com.kuang.service

引入依赖:pom.xml

<!--导入依赖:dubbo+zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

<!--zkclient-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
<!--日志会冲突-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.6.0</version>
<!-- 排除这个slf4j-log4j12-->
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2.2  创建订单服务(服务消费者)

在项目中创建第二个模块:consumer-server

 业务层接口:UserService

package com.kuang.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    // 想拿到provider-server提供的票,要去注册中心拿到服务
    @Reference  // 引用服务, pom坐标,可以定义路径相同的接口名
    TicketService ticketService;

    public void buyTicket() {
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心拿到=>"+ticket);
    }
}

  为了引用TicketService,可以用pom坐标的方式,也可以定义路径相同的接口名

两边的接口相同,才能调用到,在consumer-server中也写一个TicketService

TicketService

package com.kuang.service;

public interface TicketService {
    public String getTicket();
}

  application.properties

server.port=8002

# 消费者去哪里拿服务需要暴露自己的名字
dubbo.application.name=consumer-server
# 注册中心的地址,可以在任何电脑上!
dubbo.registry.address=zookeeper://127.0.0.1:2181

2.3 启动

首先启动zookeeper的zkServer.cmd,zkCli.cmd,双击即可

 

再开启dubbo-admin,java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

再启动两个模块的主启动类

服务提供者:

 

 消费者:

 

3.在开发过程中遇到的bug

 我的解决办法是将pom.xml中的这两个依赖降级到2.12.0就可以了

 参考:

https://www.cnblogs.com/xichji/p/14097076.html

bug调试:

https://blog.csdn.net/TO_my_honour/article/details/98806550?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

https://www.cnblogs.com/zhangmingcheng/p/12073818.html

https://blog.csdn.net/qq_39597203/article/details/86065353?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

https://blog.csdn.net/weixin_39816332/article/details/83239307

原文地址:https://www.cnblogs.com/GumpYan/p/14929899.html