| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 【手写一篇简单的Dubbo程序实现远程调用】 -> 正文阅读 |
|
[Java知识库]【手写一篇简单的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进行统计。 执行流程
搭建一个简单的Dubbo项目 整体结构如下: ? ? api:负责提供对外的接口 provider:提供者? consumer:调用者 父项目DubboParent中Pom导入依赖项 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ? ?<modelVersion>4.0.0</modelVersion> ? ? ?<groupId>com.cowain</groupId> ? ?<artifactId>DubboParent</artifactId> ? ?<packaging>pom</packaging> ? ?<version>1.0-SNAPSHOT</version> ? ?<modules> ? ? ? ?<module>api</module> ? ? ? ?<module>provider</module> ? ? ? ?<module>consumer</module> ? ?</modules> ? ?<parent> ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ?<artifactId>spring-boot-starter-parent</artifactId> ? ? ? ?<version>2.1.10.RELEASE</version> ? ?</parent> ? ? ? ?<dependencyManagement> ? ? ? ?<dependencies> ? ? ? ? ? ?<dependency> ? ? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ? ? ?<artifactId>spring-boot-starter</artifactId> ? ? ? ? ? ? ? ?<version>2.1.10.RELEASE</version> ? ? ? ? ? ?</dependency> ? ? ? ? ? ?<dependency> ? ? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId> ? ? ? ? ? ? ? ?<version>2.1.10.RELEASE</version> ? ? ? ? ? ?</dependency> ? ? ? ? ? ?<dependency> ? ? ? ? ? ? ? ?<groupId>org.apache.dubbo</groupId> ? ? ? ? ? ? ? ?<artifactId>dubbo-spring-boot-starter</artifactId> ? ? ? ? ? ? ? ?<version>2.7.3</version> ? ? ? ? ? ?</dependency> ? ? ? ? ? ?<dependency> ? ? ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ? ? ?<artifactId>curator-recipes</artifactId> ? ? ? ? ? ? ? ?<version>4.2.0</version> ? ? ? ? ? ?</dependency> ? ? ? ? ? ?<dependency> ? ? ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ? ? ?<artifactId>curator-framework</artifactId> ? ? ? ? ? ? ? ?<version>4.2.0</version> ? ? ? ? ? ?</dependency> ? ? ? ?</dependencies> ? ?</dependencyManagement> ? </project> api中代码结构: ? provider结构: ? Pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ? ?<parent> ? ? ? ?<artifactId>DubboParent</artifactId> ? ? ? ?<groupId>com.cowain</groupId> ? ? ? ?<version>1.0-SNAPSHOT</version> ? ?</parent> ? ?<modelVersion>4.0.0</modelVersion> ? ? ?<artifactId>provider</artifactId> ? ? ?<dependencies> ? ? ? ?<dependency> ? ? ? ? ? ?<artifactId>api</artifactId> ? ? ? ? ? ?<groupId>com.cowain</groupId> ? ? ? ? ? ?<version>1.0-SNAPSHOT</version> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ?<artifactId>spring-boot-starter</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.dubbo</groupId> ? ? ? ? ? ?<artifactId>dubbo-spring-boot-starter</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ?<artifactId>curator-recipes</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ?<artifactId>curator-framework</artifactId> ? ? ? ?</dependency> ? ?</dependencies> ? ? </project> DubboServiceImpl package com.cowain.service.impl; ? import com.cowain.dubbo.service.DobbuService; import org.apache.dubbo.config.annotation.Service; /** * @Author: fxw * @Date: 2022/1/10 21:40 */ @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 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ? ?<parent> ? ? ? ?<artifactId>DubboParent</artifactId> ? ? ? ?<groupId>com.cowain</groupId> ? ? ? ?<version>1.0-SNAPSHOT</version> ? ?</parent> ? ?<modelVersion>4.0.0</modelVersion> ? ? ?<artifactId>consumer</artifactId> ? ? ?<dependencies> ? ? ? ?<dependency> ? ? ? ? ? ?<artifactId>api</artifactId> ? ? ? ? ? ?<groupId>com.cowain</groupId> ? ? ? ? ? ?<version>1.0-SNAPSHOT</version> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.dubbo</groupId> ? ? ? ? ? ?<artifactId>dubbo-spring-boot-starter</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ?<artifactId>curator-recipes</artifactId> ? ? ? ?</dependency> ? ? ? ?<dependency> ? ? ? ? ? ?<groupId>org.apache.curator</groupId> ? ? ? ? ? ?<artifactId>curator-framework</artifactId> ? ? ? ?</dependency> ? ?</dependencies> ? </project> 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; ? /** * @Author: fxw * @Date: 2022/1/10 21:50 */ @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; ? /** * @Author: fxw * @Date: 2022/1/10 21:48 */ @Service public class ConsumerServiceImpl implements ConsumerService { ? @Reference ? private DobbuService dobbuService; ? @Override ? public String demo() { ? ? ? return dobbuService.testDemo("李佳春"); ? } } ConsumerService package com.cowain.service; ? /** * @Author: fxw * @Date: 2022/1/10 21:46 */ 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; ? /** * @Author: fxw * @Date: 2022/1/10 21:44 */ @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的执行流程,此篇博客仅供学习使用,如有不足,请多多指教。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:08:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |