Dubbo远程调用

news2025/1/8 11:30:36

分布式系统中,各个系统间远程调用的性能决定了这个分布式系统好坏

Dubbo是专门用来解决各个服务间调用的RPC框架,解决分布式系统中的远程调用问题

而Zookeeper(注册调度中心)的作用是:比如说50台用户服务器,与50台订单服务器,但是上线后发现用户服务器使用率较低,那么Zookeeper的作用就是统一管理调度

Dubbo采用的是Socket通信机制,可以提升通信效率,并且可以建立长连接.

Dubbo是一款高性能,轻量级的开源的RPC框架.它的三大核心能力:

1.面向接口的远程方法调用

2.智能容错和负载均衡

3.服务自动注册和发现

官网:http://dubbo.apache.org/zh-cn/

这里所谓的Container容器   生产者和消费者都是有容器的,这里指Spring容器

                                   register注册 subscribe订阅  notify通知  invoke调用

Provider:生产者 暴露服务的提供方,向注册中心注册自己提供的服务

Consumer:消费者 调用远程服务,启动时向注册中心订阅所需要服务,从提供者地址列表,基于软件负载均衡算法,选一台提供者进行调用.如果调用失败,再选另外一台调用

Container:容器   Spring和Dubbo可以无缝对接  这个容器可以理解为Spring容器

Registry:注册中心  返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更的数据给消费者

Monitor:监控中心  Dubbo本身的功能 服务生产者和消费者在内存中累计调用次数和时间,定时每分钟发送一次统计数据到监控中心

Dubbo调用协议:就是消费者调用生产者需要的一种协议

Dubbo支持的协议有:dubbo,hessan,rmi,http,webservice,thrift,mmemmcached,redis.

Dubbo官方推荐使用dubbo协议.dubbo协议默认端口20880

注册中心可以没有      

演示直连的方式

创建一个空项目

设置下maven  encoding

创建moudle

建个maven工程

pom.xml

创建一个实体类  记得序列化  不然报错

定义个接口

写个实现类

创建一个Spring配置文件 将服务暴露出去

我们需要启动这个web项目  将项目改成web项目

模块下不让添加框架支持   用下面方式

配置Tomcat启动服务

启动

下面创建个消费者

为了避免一会又要改成web工程  直接创建web工程

依赖还是那几个  servlet依赖不用管

这里注意,在直连的情况下,消费者无法知道生产者提供了哪些接口,需要把生产者打成jar包,让消费者依赖

要把生产者打jar包  先把生产者的

<packaging>war</packaging>注释掉  等打包完成再恢复

消费者配置Spring配置文件

这个id不影响

两个tomcat端口号  和 jmx 修改下

 示例代码

链接:https://pan.baidu.com/s/1ZV-OzE5aBkhnBFUMEhav0w 
提取码:bn72 
--来自百度网盘超级会员V4的分享

上面例子,把生产者整个jar包搬到消费者那,好像看不出Dubbo的效果,甚至说我直接new个实现类也可以完成

实际使用中

官方推荐必须有一个接口工程  它就是一个maven java工程

要求接口工程里存放的内容如下:

1.对外暴露的服务接口

2.实体bean对象

下面还是以直连的方式,分成三个包   分别是生产者  接口工程   消费者

下面对上面的直连方式进行改造

还是在原来项目的基础上新增maven工程

创建接口工程

接口工程里放的是接口和实例bean

上面这个项目打成jar包,放到生产者和消费者那边

配置方面和原先是一样的  只不过分包了

第二组测试 就是将接口工程独立出来   然后生产者和消费者都去依赖接口工程

链接:https://pan.baidu.com/s/111Jkx8qYkXvF-oObbIxA7g 
提取码:if2x 
--来自百度网盘超级会员V4的分享

上面两个例子是SpringMVC中   通过Dubbo两个应用直连的方式

但是直连的话,无法保证服务最优化,调度问题也无法解决(服务空闲浪费资源) 管理服务

这里就扯到注册中心  Zookeeper

注册中心有很多

Dubbo官方推荐使用Zookeeper注册中心

关于Zookeeper安装及配置Zookeeper安装及配置-CSDN博客

下面例子用Zookeeper作为Bubbo服务的注册中心

生产者的配置  新增了Zookeeper依赖

消费者  依赖一样加了Zookeeper依赖

因为已经使用注册中心  url可以不写

其他配置还是一样

配置Tomcat 注意生产者和消费者   端口号和JMX号

先运行Zookeeper

然后启动生产者  和消费者

代码地址

链接:https://pan.baidu.com/s/1JqmCXljWl5hdnsiH13wkeA 
提取码:4qeg 
--来自百度网盘超级会员V4的分享

关于服务接口版本号问题   原因在于 系统迭代  代码更新  版本号用于指定服务的版本

新建09  和 10  还是用06的接口包

其他一样

下面是生产者

配置Tomcat   注意端口号和JMX号     启动Zookeeper  生产者和消费者  测试

链接:https://pan.baidu.com/s/1n6HJAbO2FXTVao5cnqXp3A 
提取码:my77 
--来自百度网盘超级会员V4的分享

在消费者加上check  如果为true 则需要生产者先启动,因为会去Zookeeper检查该服务,如果生产者不提前启动  检查不到

生产者和服务者都可以配置指定服务超时时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1169226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 | 单链表专题【详解】

数据结构 | 单链表专题【详解】 文章目录 数据结构 | 单链表专题【详解】链表的概念及结构单链表的实现头文件打印尾插头插尾删头删查找在指定位置之前插入数据在指定位置之后插入数据删除pos节点删除pos之后的节点销毁链表 顺序表遗留下来的问题 中间/头部的插⼊删除&#xff…

路由器基础(六): IS-IS原理

一、IS-IS概念 IS-IS是一种基于链路状态算法的内部网关协议&#xff0c;与TCP/IP网络中的OSPF协议非常相似&#xff0c;也是通过SPF算法确定最终路由表。 由于标准的IS-IS并不直接适合于IP网络&#xff0c;因此IETF制定了用于IP 网络的是集成化的IS-IS协议&#xff0c;称为集成…

您对互联网有多“上瘾”?

萨里大学的科学家决定检查现代用户的网络成瘾程度。他们的一篇文章最近发表在 《旅行与旅游营销杂志》上 &#xff0c;其中包含对受此问题困扰的年轻人&#xff08;而不仅仅是年轻人&#xff09;的研究和分类结果。 796名不同年龄段的人参加了实验。科学家们仔细监测了他们的行…

【错误解决方案】matplotlib绘图中文标签不显示

1. 错误提示 Matplotlib 中文标签不显示的问题通常是由于中文字符在图形中的编码问题导致的。例如&#xff1a; import numpy import matplotlib.pyplot as pltz numpy.arange(-5, 5, .1) sigma_fn numpy.vectorize(lambda z: 1/(1numpy.exp(-z))) sigma sigma_fn(z)fig …

探究Java编程思想:经典之作与学习之道

目录 1 前言2 适合的人群3 书籍特点4 如何阅读《Java编程思想》5 阅读《Java编程思想》可能带来的效果6 结语 1 前言 有那么一本书&#xff0c;凡是学习java的人都知道&#xff0c;也都把那本书奉为经典&#xff0c;那就是《Java编程思想》&#xff0c;该书有一定的门槛&#…

几种常见的Matting数据集【附度盘下载链接】

本文整理了多种Matting数据集&#xff1a;alphamatting、PPM-100、Matting_Human_Half、RealWorldPortrait-636、PhotoMatte85、DVM、AIM-500等&#xff1b; 所有数据集已经打包放在百度云盘&#xff0c;大家可以自由下载&#xff1a; https://pan.baidu.com/s/15Q6BgYv6tSY7py…

【0基础学Java第六课】-- 数组的定义与使用

6 数组的定义与使用 6.1 什么是数组6.2 数组的创建及初始化6.2.1 数组的创建&#xff1a;6.2.2 数组的初始化 6.3 数组的使用6.3.1 数组中元素的访问6.3.2 Java中JVM当中的内存划分6.3.3 遍历数组 6.4 数组是引用类型6.4.1 初始JVM的内存分布6.4.2 基本类型变量与引用类型变量的…

【计算机网络实验】tcp建立和释放

wireshark开始捕获后&#xff0c;浏览器打开xg.swjtu.edu.cn&#xff0c;网页传输完成后&#xff0c;关闭浏览器&#xff0c;然后停止报文捕获。 若捕获不到dns报文&#xff0c;先运行ipconfig/flushdns命令清空dns缓存 DNS报文 设置了筛选条件&#xff1a;dns 查询报文目的…

【redis面试题】数据持久化

文章目录 前言一、RDB 的概述RDB 的执行原理 二、AOF 的概述AOF 的特点 三、RDB 与 AOF 的区别 前言 跟着B站的黑马程序员学习面试题&#xff0c;目前是redis的第五个内容——数据持久化 课程传送门&#xff1a;redis——数据持久化 在 Redis 中&#xff0c;提供了两种数据持久…

数码3C零售门店运营,智慧显示有何优势?以清远电信为例。

随着时代和科技的发展&#xff0c;线下实体零售门店运营方式也逐步进化&#xff0c;面对有大体量线门店&#xff0c;需要花费更多心思和资源管理的品牌&#xff0c;在全球经济缓慢增长的当下&#xff0c;开始走向去冗余、提效率的阶段&#xff0c;俗称降本增效。 在此阶段&…

Oracle注入(基础篇)

先了解Oracle一些内容 Oracle做联合注入的注意事项(附带示例) 联合查询的字段数必须和前面的查询语句字段数一致 select id,username,password from admin union select 1,admin from dual (X) 联合查询的字段类型也必须和前面的查询语句字段类型一致 select id,username,pas…

指针函数等

1.指针函数 本质上是一个函数&#xff0c;返回值是这个类型的指针 因为a的地址存放在fun函数中&#xff0c;程序结束后&#xff0c;地址释放&#xff0c;所以调用时为野指针。 a为局部变量&#xff0c;注意生命周期 解决办法1.使用static延长变量a的生命周期&#xff0c; 2.…

cmake find_package、引用GDAL 初步学习

上次的源码的CMakeLists.txt文件里有 find_package(GDAL REQUIRED) 这句; 从字面意思看此源码需要GDAL库; 查了一下,find_package 指令的基本功能是查找第三方库,并返回其细节; 我当前GDAL安装在D:\GDAL; 先把它的CMakeLists.txt重命名为别的,不使用; 新建一个C…

剑指offer --- 从尾到头打印链表

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 当我们需要访问单向链表中特定位置值时&#xff0c;算法复杂度往往是O(n)&#xff0c;在得到靠后节点的值时不可避免地从前向后遍历访问链表&#xff0c;那么当应题目要求从尾到头打印链表时&#xff0c;至少…

数据结构第二课 -----线性表之顺序表

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

2022年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 如下所示的2行代码,最后print()函数打印出来的结果是?( ) c = [[赵大,21,男,北京],

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation

【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation 文章目录 【论文阅读】Equivariant Contrastive Learning for Sequential Recommendation1. 来源2. 介绍3. 前置工作3.1 序列推荐的目标3.2 数据增强策略3.3 序列推荐的不变对比学习 4. 方法介绍4…

力扣每日一题94:二叉树的中序遍历

题目描述&#xff1a; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#x…

速学数据结构 | 循环队列怎么写才最高效?只需要掌握这些技巧

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《Linux深造日志》《C干货基地》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言一、什么是循环队列&#xff1f;二、如何实现循环队列&#xff1f;2.1 循环队列的结构2.2 循环…

leetcode:268. 丢失的数字(异或运算)

一、题目 函数原型&#xff1a; int missingNumber(int* nums, int numsSize) 二、思路&#xff1a; 0 - n缺失一个数字&#xff0c;那么将数组中所有的数字按位异或&#xff0c;再按位异或0 - n的所有数字&#xff0c;由于 x ^ x 0&#xff0c;0 ^ x x&#xff0c;因此最终运…