您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Dubbo+Zookeeper的RPC远程调用框架demo

时间:2019-09-27 11:08:29  来源:  作者:

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。

Dubbo是一款高性能、轻量级的开源JAVA RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

 

  • provider:暴露服务的服务提供方
  • consumer:调用远程服务的服务消费方
  • registry:服务注册于发现的注册中心
  • monitor:统计服务调用次数和调用时间的监控中心
  • container:服务运行容器

一、dubbo-provider

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

 

1、UserInfo

为什么要实现Serializable接口?当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。

@Data
public class UserInfo implements Serializable {
 private String account;
 private String password;
}

2、UserService

public interface UserService {
 // 定义用户登录的api
 UserInfo login(UserInfo user);
}

3、UserServiceImpl

@Component
@Service(interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {
 public UserInfo login(UserInfo user) {
 UserInfo reUser = new UserInfo();
 reUser.setAccount("登录的账号为:"+user.getAccount());
 reUser.setPassword("登录的密码为:"+user.getPassword());
 return reUser;
 }
}

4、DubboProviderApplication

@SpringBootApplication
@EnableDubboConfiguration // 启用dubbo自动配置
public class DubboProviderApplication {
 public static void main(String[] args) {
 SpringApplication.run(DubboProviderApplication.class, args);
 }
}

5、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">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.boot.dubbo.demo</groupId>
 <artifactId>dubbo-provider</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>dubbo-provider</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.6.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <!--Dubbo依赖-->
 <dependency>
 <groupId>com.alibaba.spring.boot</groupId>
 <artifactId>dubbo-spring-boot-starter</artifactId>
 <version>2.0.0</version>
 </dependency>
 <!--自动生成getter,setter,equals,hashCode和toString等等-->
 <dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <version>1.16.20</version>
 <scope>provided</scope>
 </dependency>
 <!--Zookeeper客户端-->
 <dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.10</version>
 </dependency>
 <!--Zookeeper依赖,排除log4j避免依赖冲突-->
 <dependency>
 <groupId>org.apache.zookeeper</groupId>
 <artifactId>zookeeper</artifactId>
 <version>3.4.10</version>
 <exclusions>
 <exclusion>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 </exclusion>
 <exclusion>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 </exclusion>
 </exclusions>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
</project>

6、application.yml

spring:
 dubbo:
 application:
 name: dubbo-provider
 protocol:
 name: dubbo
 port: 20880
 registry:
 address: zookeeper://127.0.0.1:2181

二、dubbo-consumer

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

 

1、UserController

@RestController
public class UserController {
 @Reference // 引用dubbo服务器提供服务器接口
 private UserService userService;
 @GetMapping("/login")
 public UserInfo login(UserInfo userInfo) {
 return userService.login(userInfo);
 }
}

2、DubboConsumerApplication

@SpringBootApplication
@EnableDubboConfiguration // 启用dubbo自动配置
public class DubboConsumerApplication {
 public static void main(String[] args) {
 SpringApplication.run(DubboConsumerApplication.class, args);
 }
}

3、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">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.boot.dubbo.demo</groupId>
 <artifactId>dubbo-consumer</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>dubbo-consumer</name>
 <description>Demo project for Spring Boot</description>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.6.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <!--依赖dubbo-provider服务提供者-->
 <dependency>
 <groupId>com.boot.dubbo.demo</groupId>
 <artifactId>dubbo-provider</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 </dependency>
 <!--Dubbo依赖-->
 <dependency>
 <groupId>com.alibaba.spring.boot</groupId>
 <artifactId>dubbo-spring-boot-starter</artifactId>
 <version>2.0.0</version>
 </dependency>
 <!--Zookeeper客户端-->
 <dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.10</version>
 </dependency>
 <!--Zookeeper依赖,排除log4j避免依赖冲突-->
 <dependency>
 <groupId>org.apache.zookeeper</groupId>
 <artifactId>zookeeper</artifactId>
 <version>3.4.10</version>
 <exclusions>
 <exclusion>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 </exclusion>
 <exclusion>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 </exclusion>
 </exclusions>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 </build>
</project>

4、application.yml

spring:
 dubbo:
 application:
 name: dubbo-consumer
 protocol:
 name: dubbo
 port: 20880
 registry:
 address: zookeeper://127.0.0.1:2181
server:
 port: 8081

三、Zookeeper安装配置

「链接」

「链接」

「链接」

四、项目启动

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

 

五、查看Zookeeper服务注册情况

新人一看就懂:Dubbo+Zookeeper的RPC远程调用框架demo

 

六、通过浏览器发送请求(dubbo-provider的服务注册到Zookeeper上,dubbo-consumer消费者可以调用注册的服务)。

到此,rpc远程调用服务通了!感兴趣的话可以去学习下。


原文链接:https://blog.csdn.net/sinat_27933301/article/details/100991670



Tags:Dubbo   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
第一部分介绍生产上出现Dubbo服务拥堵的情况,以及Dubbo官方对于单个长连接的使用建议。 第二部分介绍Dubbo在特定配置下的通信过程,辅以代码。 第三部分介绍整个调用过程中与性能相关的一些参数。 第四部分通过调整...【详细内容】
2021-06-18  Tags: Dubbo  点击:(123)  评论:(0)  加入收藏
1. Dubbo简介及线程池策略Apache Dubbo 是一款高性能、轻量级的开源 Java 服务框架。提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现...【详细内容】
2021-05-18  Tags: Dubbo  点击:(202)  评论:(0)  加入收藏
Dubbo里除了Service和Config层为API,其它各层均为SPI。相比于Java中的SPI仅仅通过接口类名获取所有实现,Dubbo的实现可以通过接口类名和key值来获取一个具体的实现。通过SPI...【详细内容】
2020-09-07  Tags: Dubbo  点击:(62)  评论:(0)  加入收藏
Dubbo(来自于阿里巴巴)Dubbo是一个分布式服务框架,致力于提供高性能和透明化的PRC远程调用服务调用方案。 Dubbo的的特点 通过spring配置的方式即可完成服务化,对于应用无入侵。...【详细内容】
2020-08-10  Tags: Dubbo  点击:(41)  评论:(0)  加入收藏
概述Dubbo支持同一服务向多个注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。另外,注册中心是也支持自定义扩...【详细内容】
2020-07-18  Tags: Dubbo  点击:(54)  评论:(0)  加入收藏
导读:在分布式系统中,远程调用是最基础也是最重要的基石。历史上,曾经先后出现过 CORBA、RMI、EJB、WebService 等技术和规范,在服务化以及微服务日趋流行的今天,更多的被广泛使...【详细内容】
2020-07-13  Tags: Dubbo  点击:(65)  评论:(0)  加入收藏
概述Dubbo的配置项非常多,但所有配置项分为三大类,服务发现、服务治理、性能调优。服务发现类的配置项,表示该配置项用于服务的注册与发现,目的是让消费方找到提供方;服务治理类...【详细内容】
2020-07-13  Tags: Dubbo  点击:(95)  评论:(0)  加入收藏
前言这周收到外部合作同事推送的一篇文章,【漏洞通告】Apache Dubbo Provider默认反序列化远程代码执行漏洞(CVE-2020-1948)通告。按照文章披露的漏洞影响范围,可以说是当前所有...【详细内容】
2020-07-09  Tags: Dubbo  点击:(118)  评论:(0)  加入收藏
0x01 漏洞背景2020年06月23日, 360CERT监测发现 Apache Dubbo 官方 发布了 Apache Dubbo 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-1948,漏洞等级:高危。Apache Dubbo...【详细内容】
2020-06-24  Tags: Dubbo  点击:(47)  评论:(0)  加入收藏
不知道你是否在工作中有遇到过类似情况: dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。 telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来...【详细内容】
2020-06-18  Tags: Dubbo  点击:(59)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条