Dubbo整体架构与核心组件认知以及简单示例

前言

今天小编给大家带来dubbo的简单介绍,也是dubbo第一篇。好废话不多说开始新的征程。

Dubbo概要

DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架。

Dubbo架构图

在这里插入图片描述

流程说明

  1. Provider(提供者)绑定指定端⼝并启动服务
  2. 提供者连接注册中心,并将本机IP、端⼝、应⽤信息和提供服务信息发送⾄注册中心存储
  3. Consumer(消费者),连接注册中心 ,并发送应⽤信息、所需要服务信息⾄注册中心
  4. 注册中心根据消费者所求服务信息匹配对应的提供者列表发送⾄Consumer 应用缓存。
  5. Consumer 在发起远程调⽤时基于缓存的消费者列表择其⼀发起调用。
  6. Provider 状态变更会实时通知注册中心、在由注册中心实时推送⾄Consumer

代码示例

简单示例

public class DubboRemoteTest {
    @Test
    public void clientTest(){
        ApplicationConfig app = new ApplicationConfig("dubbo-client");
        ReferenceConfig<IWhateverService>  referenceConfig = new ReferenceConfig<>();
        referenceConfig.setApplication(app);
        referenceConfig.setInterface(IWhateverService.class);
        referenceConfig.setUrl("dubbo://127.0.0.1:8080/");
        IWhateverService whateverService = referenceConfig.get();
        String serviceMsg = whateverService.printParam("hello world");
        System.out.println(serviceMsg);
    }

    @Test
    public void openService() throws IOException {

        //服务配置
        ServiceConfig<IWhateverService> serviceConfig = new ServiceConfig<>();
        ApplicationConfig app = new ApplicationConfig("dubbo-server");
        //应用
        serviceConfig.setApplication(app);
        //协议
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(8080);
        serviceConfig.setProtocol(protocolConfig);
        RegistryConfig registry = new RegistryConfig("multicast://224.1.1.1:2223");
        serviceConfig.setRegistry(registry);
        //设置接口,设置接口所对应的实体类
        serviceConfig.setInterface(IWhateverService.class);
        serviceConfig.setRef(new WhateverServiceImpl());
        serviceConfig.export();
        System.out.println("服务已启动");
        //不让服务停止
        int read = System.in.read();
    }
}

public interface IWhateverService {
     String printParam(String msg);
}

public class WhateverServiceImpl implements IWhateverService {
    @Override
    public String printParam(String msg) {
        System.out.println(msg);
        return "accept param success";
    }
}

打印结果

//服务端打印
服务已启动
hello world
//客户端打印
accept param success

以上是简单示例,接下来小编写一个简单的集群

public class DubboServiceTest {


    public IWhateverService getClient() {
        ApplicationConfig app = new ApplicationConfig("dubbo-client");
        ReferenceConfig<IWhateverService> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setApplication(app);
        referenceConfig.setInterface(IWhateverService.class);
        RegistryConfig registry = new RegistryConfig("multicast://224.1.1.1:2223");
        referenceConfig.setRegistry(registry);
//        referenceConfig.setUrl("dubbo://127.0.0.1:8080/");
        return referenceConfig.get();

    }

    public static void main(String[] args) throws IOException {
        IWhateverService client = new DubboServiceTest().getClient();
        while (System.in.read() != 'q') {
            System.out.println(client.printParam("ok"));
        }
    }

    // 开启服务1
    @Test
    public void openServer1() throws IOException {
        openService(12345);
        System.in.read();
    }

    @Test
    public void openServer2() throws IOException {
        openService(23456);
        System.in.read();
    }

    @Test
    public void openServer3() throws IOException {
        openService(34567);
        System.in.read();
    }


    public void openService(int port) throws IOException {

        //服务配置
        ServiceConfig<IWhateverService> serviceConfig = new ServiceConfig<>();
        ApplicationConfig app = new ApplicationConfig("dubbo-server");
        //应用
        serviceConfig.setApplication(app);
        //协议
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(port);
        serviceConfig.setProtocol(protocolConfig);
        RegistryConfig registry = new RegistryConfig("multicast://224.1.1.1:2223");
        serviceConfig.setRegistry(registry);
        //设置接口,设置接口所对应的实体类
        serviceConfig.setInterface(IWhateverService.class);
        serviceConfig.setRef(new WhateverServiceImpl(port));
        serviceConfig.export();
        System.out.println(port + "服务已启动");

    }
}

修改实现类

public class WhateverServiceImpl implements IWhateverService {

    private Integer port;

    public WhateverServiceImpl(Integer port) {
        this.port = port;
    }

    @Override
    public String printParam(String msg) {
        System.out.println(msg);

        return "accept param success port:" + port;
    }
}

调用并查看打印结果

//客户端调用
54
accept param success port:34567
accept param success port:34567
accept param success port:12345

总结

以上就是小编今天为大家带来的dubbo文章,非常简单,而且我们在实际开发中不可能是这么写代码的,只是让大家了解一下dubbo服务需要哪些参数,他主要有服务配置,应用,协议,以及接口组成。调用段也就相当简单了。其实聪明的小伙伴应该已经发现他真正的服务发现以及接口注入使用动态代理实现的。当然上面同样没使用我们dubbo常用的注册中心zookeeper,使用 new RegistryConfig(“multicast://224.1.1.1:2223”),大家可以自己学习一下哦。后续为大家奉上。好今天就讲到这儿。谢谢大家的浏览

感谢与参考

感谢源码阅读网鲁班大叔讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木兮君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值