Dubbo+Zookeeper

服务注册与发现:Dubbo(发现=监控)+Zookeeper(注册)

1.引言

1.All in One    
        Service            
        数据访问        
        控制跳转          
        业务处理       

2.MVC/三层架构
    View 、Model、Control     
 3.RPC client-server
 4.Dobbo-SOA(面向服务的架构)——客户端、注册中心、服务器
            注册中心(key:value)--zookeeper(树形结构)
            学生管理系统 192.168.1.101
            图书管理系统 192.168.1.102
        server:学生管理系统8881、图书管理系统8882、注册系统8883
    
    1.所有代码在一个类/模块中编写,容易造成代码混乱,维护起来麻烦
    2.在同一台计算机中编写,并发能力有限
    3.使用rpc可以让一个项目部署在多个不同的计算机中,此种模式的ip+端口号乱,分散

Dubbo是一款高性能、轻量级的开源Java RPC框架。

    三大核心:
        1、面向接口远程调用、屏蔽远程调用底层细节
        2、智能容错和负载均衡、
        3、服务自动注册和发现

dubbo-admin:是一个监控管理后台 (可以查看发布的服务)

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 访问localhonst:7001可视化看服务接口

Provider 服务提供方
Consumer 服务消费方
Registry 注册中心 
     ZooKeeper(动物园管理者):hadoop hive            

       

为什么Dubbo性能高?

  dubbo采用效率最高的二进制流

  网络通信:不同于HTTP七步走(3次握手,4次挥手),Dubbo采用Socket通讯机制,一步到位,提高通讯效率,可以建立长链接,直接传输数据

 

dubbo历史:2011年托管hithub开源,2014年停止更新,2017年SpringCloud出世
官网:dubbo.apache.org

dubbo两种方式

  Registry注册中心:注册的是服务的URL地址(官方推荐zookeeper 2181,需要启动zookeeper服务)

  dubbo支持的协议:dubbo,默认20880(直连,没有屏蔽底层调用细节)->可以将接口单独做成一个模块,消费者和生产者均引用即可。

    

2、环境搭建

rpm -ivh jdk-8.rpm(安装),会自动安装到/usr/java,通过pwd查看
        

window系统:解压压缩包,执行bin/zkServer.cmd,启动Zookeeper注册中心服务

实战:

一、服务方

1、导入依赖

 <!--dubbo+zookeeper-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
<!--        引入zookeeper会日志冲突-->
        <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.4.14</version>
            <!--排除slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、配置服务器application.properties

server.port=8080

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

3、注册服务

接口服务类

public interface TicketService {
    public String getTicket();
}

接口服务类实现

@Service   //可以被扫描到,在项目一启动就自动注册到注册中心
@Component //使用dubbo后尽量不用service注解
public class TicketServiceImpl implements TicketService{
    @Override
    public String getTicket() {
        return "hello zookeeper!";
    }
}

二、消费方

1、导入依赖

同上

2、配置application.properties

server.port=8081

#消费者哪里拿服务器需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址 zookeeper地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

3、调用服务(注册中心拿服务)

 注意:        
        1.同名接口赋值 -- 注意包的名字要一致
        2.pom注入 @Reference

@Service
public class UserService {

    /*
        注册中心拿服务
        1.同名接口赋值 -- 注意包的名字要一致
        2.pom注入
     */
    @Reference
    TicketService ticketService;

    public void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println(ticket);
    }
}

 

posted @ 2022-04-21 17:28  小吴dnd  阅读(31)  评论(0编辑  收藏  举报