【手写一篇简单的Dubbo程序实现远程调用】

【手写一篇简单的Dubbo程序实现远程调用】,第1张

【手写一篇简单的Dubbo程序实现远程调用】 手写一篇简单的Dubbo程序实现远程调用

前言:

本人小白一枚,博客为自己学习时课后笔记,如有不足,请大佬们多多指教。

关于dubbo简介:

Dubbo的介绍

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。

Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

Dubbo架构图简介

架构说明

关于虚线和实线:虚线表示异步,实现表示同步。异步不影响线程阻塞,同步必须等待响应结果才能继续执行,相对性能低。

Provider

提供者。编写持久层和事务代码.

Container

容器(spring)容器,Dubbo是基于spring实现的。

Registry

注册中心。放置所有Provider提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。

Consumer

消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以报页面等)。调用XXXXServiceImpl中的方法。

Monitor

监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。

执行流程

    statr:启动spring容器时会启动Provider

    register:将provider中相关信息注册到registry中

    subscribe:Consumer从Registry中订阅Provider的信息

    notify:通知给Consumer

    invoke:Consumer根据Registry通知的信息进行调用Provider中方法。

    count:Consumer和Provider把调用次数信息异步发送给Monitor进行统计。

搭建一个简单的Dubbo项目

整体结构如下:

 

 

api:负责提供对外的接口

provider:提供者 

consumer:调用者

父项目DubboParent中Pom导入依赖项



    4.0.0
​
    com.cowain
    DubboParent
    pom
    1.0-SNAPSHOT
    
        api
        provider
        consumer
    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.10.RELEASE
    
​
​
    
        
            
                org.springframework.boot
                spring-boot-starter
                2.1.10.RELEASE
            
            
                org.springframework.boot
                spring-boot-starter-web
                2.1.10.RELEASE
            
            
                org.apache.dubbo
                dubbo-spring-boot-starter
                2.7.3
            
            
                org.apache.curator
                curator-recipes
                4.2.0
            
            
                org.apache.curator
                curator-framework
                4.2.0
            
        
    

api中代码结构:

 

provider结构:

 

Pom.xml



    
        DubboParent
        com.cowain
        1.0-SNAPSHOT
    
    4.0.0
​
    provider
​
    
        
            api
            com.cowain
            1.0-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.apache.dubbo
            dubbo-spring-boot-starter
        
        
            org.apache.curator
            curator-recipes
        
        
            org.apache.curator
            curator-framework
        
    
​
​

DubboServiceImpl

package com.cowain.service.impl;
​
import com.cowain.dubbo.service.DobbuService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class DubboServiceImpl implements DobbuService {
    @Override
    public String testDemo(String param) {
        System.out.println("执行demo");
        return param+":hello";
    }
}
​

apploication.xml

只要配置zookeeper的ip与端口

dubbo:
  application:
    name: dubbo-provider
  registry:
     address: zookeeper://192.168.153.129:2181
  protocol:
    port: 20884

consumer结构:

Pom.xml



    
        DubboParent
        com.cowain
        1.0-SNAPSHOT
    
    4.0.0
​
    consumer
​
    
        
            api
            com.cowain
            1.0-SNAPSHOT
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.apache.dubbo
            dubbo-spring-boot-starter
        
        
            org.apache.curator
            curator-recipes
        
        
            org.apache.curator
            curator-framework
        
    

ConsumerController

package com.cowain.controller;
​
import com.cowain.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
​

@Controller
public class ConsumerController {
    @Autowired
    private ConsumerService consumerService;
    @RequestMapping("/demo")
    @ResponseBody
    public String testDubboDemo(){
    return consumerService.demo();
    }
}
​

ConsumerServiceImpl

package com.cowain.service.impl;
​
import com.cowain.dubbo.service.DobbuService;
import com.cowain.service.ConsumerService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
​

@Service
public class ConsumerServiceImpl implements ConsumerService {
    @Reference
    private DobbuService dobbuService;
    @Override
    public String demo() {
        return dobbuService.testDemo("李佳春");
    }
}

ConsumerService

package com.cowain.service;
​

public interface ConsumerService {
   public String demo();
}
​

ConsumerApplication

package com.cowain;
​
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​

@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}
​

apploication.xml

dubbo:
  application:
    name: dubbo-consumer
  registry:
     address: zookeeper://192.168.153.129:2181

测试:

 

zookeeper:

 

总结

代码虽然简单,但是得明白dubbo的执行流程,此篇博客仅供学习使用,如有不足,请多多指教。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5701741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存