Dubbo远程调用

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

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.hqwc.cn/news/161375.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试/测试开发丨ChatGPT能否成为PPT最佳伴侣

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中&#xff0c;无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT&#xff0c;协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等&#xff0c;可以给到观众更好…

WPF布局控件之DockPanel布局

前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 概述&#xff1a; DockPanel 位置子控件基于子 Dock 属性&#xff0c;你有 4 个选项停靠&#xff0c;左 (默认) &…

通过环境变量实现多个JDK切换

前文: 由于jdk版本需要升级为jdk17,因为jdk8比较常用且稳定,本人又不想卸载掉安装的jdk8,在经过查找资料后找到了可以通过修改环境变量在本地任意切换jdk版本 环境变量配置 网上教程一堆,直接跳过了,这里主要说明怎么通过配置环境变量切换 电脑->属性->高级系统设置-&g…

Java 多线程的线程间的协作

1. 等待与通知 为了支持多线程之间的协作&#xff0c;JDK 中提供了两个非常重要的方法&#xff1a;wait() 和 notify() &#xff0c;这两个方法定义在 Object 类中&#xff0c;这意味着任何 Java 对象都可以调用者两个方法。如果一个线程调用了 object.wait() 方法&#xff0c;…

K8s学习笔记——资源组件篇

引言 前一篇文章我们介绍了K8s的概念理解和常用命令&#xff0c;这篇我们重点介绍K8s的资源组件和相关配置使用。 1. Node & Pod Node: 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。为了管理 Pod&#xff0c;每个 Node 节点上至少要运行…

WordPress外链页面安全跳转插件

老白博客我参照csdn和腾讯云的外链跳转页面&#xff0c;写了一个WordPress外链安全跳转插件&#xff1a;给网站所有第三方链接添加nofollow标签和重定向功能&#xff0c;提高网站安全性。插件包括两个样式&#xff0c;由于涉及到的css不太一样&#xff0c;所以分别写了两个版本…

Linux之管道

管道 管道什么是管道匿名管道readpipe 应用有名管道mkfifoopenunlinkcopy on write 管道 什么是管道 管道是Linux中最古老的进程间通信的方式 我们把一个进程连接到另一个进程的一个数据流称作 一个管道 注意&#xff1a;管道只能单向通信 你可以把他看做是一种特殊的文件&…

嵌入式Linux HID多指触控/触摸设备报表描述符

这里只做一下简单记录&#xff0c;更为详细的修改流程后续的文章再介绍。 报表描述符 0x05, 0x0D, // Usage Page (Digitizer) 0x09, 0x04, // Usage (Touch Screen) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) 0…

python 命令行界面的用户交互

背景 说一千&#xff0c;道一万&#xff0c;程序是为用户服务的&#xff0c;所以在程序运行过程&#xff0c;与用户交互以获取用户的信息输入和决策确认&#xff0c;是无法避免的编程需要考虑和解决的需求。 一个简单的demo 如下的程序中&#xff0c;程序需要生成一个新的 i…

[LeetCode] 2.两数相加

一、题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个…

FinalCutPro 移动项目的时候,遇到失去连接的文件怎么处理

FinalCutPro 移动项目的时候&#xff0c;遇到失去连接的文件怎么处理 有时候&#xff0c;FinalCutPro 项目在移动之后&#xff0c;一些链接到外面的文件会失去连接&#xff0c;文件虽然还在原有位置&#xff0c;但显示成下面这样&#xff1a; 解决方法 1. 点击菜单【文件】…

Web3时代:探索DAO的未来之路

Web3 的兴起不仅代表着技术进步&#xff0c;更是对人类协作、创新和价值塑造方式的一次重大思考。在 Web3 时代&#xff0c;社区不再仅仅是共同兴趣的聚集点&#xff0c;而变成了一个价值交流和创新的平台。 去中心化&#xff1a;超越技术的革命 去中心化不仅仅是 Web3 的技术…