Dubbo【Dubbo实战(用户更新业务消费者实现、用户删除业务消费者实现、复习内容) 】(六)-全面详解(学习总结---从入门到深化)

news2024/11/16 21:24:03

 

目录

Dubbo实战_用户更新业务消费者实现

Dubbo实战_用户删除业务消费者实现

复习内容:


Dubbo实战_用户更新业务消费者实现

在Consumer中调用更新用户业务

    /**
     * 根据用户id修改用户名字
     * @param users
     * @return
     */
    Integer updateUsers(User users);

   /**
     * 根据用户id查询用户信息
     * @param id
     * @return
     */
    User findByUserId(Long id);

编写接口实现类

    /**
     * 更新用户
     * @param users
     * @return
     */
    @Override
    public Integer updateUsers(User users) {
        return iUpdateUserService.updateUsers(users);
   }
    /**
     * 根据用户id查询用户
     * @param id 用户id
     * @return
     */
    @Override
    public User findByUserId(Long id) {
        return iUpdateUserService.findByUserId(id);
   }

修改 Consumer 添加处理查询用户请求

    /**
     * 处理预更新查询请求
     */
   @RequestMapping("/preUpdateUser")
   public String preUpdateUser(Long userid,Model model){
        User users = this.userService.findByUserId(userid);
        model.addAttribute("users",users);
        return "updateUsers";
 }

/**
* 处理更新用户请求
*/
@PostMapping("/updateUser")
public String updateUser(User users){
   this.userService.updateUsers(users);
   return "redirect:/ok";
}

更新页面showUser页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico"
th:href="@{/static/favicon.ico}"/>
<head>
    <meta charset="UTF-8">
    <title>更新用户</title>
</head>
<body>
<form action="/user/updateUser" method="post">
    <input type="hidden" name="id" th:value="${users.id}"/><br/>
   用户姓名: <input type="text" name="name" th:value="${users.name}"/><br/>
   用户年龄:<input type="text" name="age" th:value="${users.age}"/><br/>
    <input type="submit" value="Update"/>
</form>
</body>
</html>

Dubbo实战_用户删除业务消费者实现

修改 Consumer 业务层添加删除用户业务

void deleteUsersById(Long userid);

编写接口实现类

// 用户删除服务
@Reference
private IDeleteUserService iDeleteUserService;
/**
* 根据用户id删除用户
* @param userid
*/
@Override
public void deleteUsersById(Long userid) {
      iDeleteUserService.deleteUsersById(userid);
}

修改 Consumer 添加处理删除用户请求

/**
* 处理删除用户请求
*/
@RequestMapping("/deleteUser")
public String deleteUser(Long userid){
     this.userService.deleteUsersById(userid);
     return "redirect:/ok";
}

复习内容:

Dubbo概念_什么是分布式系统
 

单机架构 

一个系统业务量很小的时候所有的代码都放在一个项目中就好了, 然后这个项目部署在一台服务器上,整个项目所有的服务都由这台 服务器提供。

缺点:

服务性能存在瓶颈
代码量庞大,系统臃肿,牵一发动全身
单点故障问题 
 集群架构

单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一 个集群。

集群存在的问题:

当你的业务发展到一定程度的时候,你会发现一个问题无论怎 么增加节点,貌似整个集群性能的提升效果并不明显了。这时 候,你就需要使用分布式架构了。 

什么是分布式 


分布式架构就是将一个完整的系统,按照业务功能,拆分成一个个 独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这 些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。 

 分布式的优势:

1、系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界 非常明确,排错也变得相当容易,开发效率大大提升。

2、系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。

3、服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以 使用该系统作为用户系统,无需重复开发。

三者区别 

总结: 将一套系统拆分成不同子系统部署在不同服务器上(这叫分布 式),然后部署多个相同的子系统在不同的服务器上(这叫集 群)。

集群:多个人在一起作同样的事 。

分布式 :多个人在一起作不同的事 。 

实时学习反馈 

1.下列属于分布式的优势的是___。

A 系统之间的耦合度大大降低

B 服务的复用性更高

C 独立部署、独立测试

D 以上都是正确

2. 下列描述分布式架构正确的是____。

A 将一套系统拆分成不同子系统部署在不同服务器上

B 所有的代码都放在一个项目中

C 多个相同的子系统部署在不同的服务器上

D 以上都是错误

Dubbo概念_什么是RPC


什么是RPC 

RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务。

 大白话理解就是:RPC让你用别人家的东西就像自己家的一样。

RPC两个作用:

屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法
隐藏底层网络通信的复杂性,让我们更加专注业务逻辑。 
常用的RPC框架 

RPC是一种技术思想而非一种规范或协议。

常见 RPC 技术和框架:

阿里的 Dubbo/Dubbox、Google gRPC、Spring Cloud。

实时效果反馈

1. RPC是_____技术。

A 本地调用

B 远程过程调用

C 过程调用

D 服务调用

2. 下列__框架不是RPC框架。

A Dubbo

B Spring Cloud

C GooglegRPC

D Spring MVC

Dubbo概念_简介 


Dubbo是什么 

Apache Dubbo是一款高性能、轻量级的开源服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

Dubbo能做什么

1、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵 入。

2、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3、服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地 址,并且能够平滑添加或删除服务提供者

注意:

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有 任何API侵入,只需用Spring加载Dubbo的配置即可。 

Dubbo支持的协议 

协议是两个网络实体进行通信的基础,数据在网络上从一个实体传 输到另一个实体,以字节流的形式传递到对端。在这个字节流的世 界里,如果没有协议,就无法将这个一维的字节流重塑成为二维或 者多维的数据结构以及领域对象。

Dubbo支持的协议

Dubbo协议
Hessian协议
HTTP协议
RMI协议
WebService协议
Memcached协议
Redis协议 
推荐: 使用Dubbo协议。

实时效果反馈 

1. Apache Dubbo是_____框架。

A 高性能Web服务框架

B 高性能Web平台

C 高性能RPC分布式服务框架

D RPC框架

2. 使用分布式架构主要原因___。

A 加快响应速度

B 提高系统的高可用性

C 可以承受更大规模的并发流量

D 提高系统的安全性

Dubbo概念_核心组件


注册中心Registry 

在Dubbo微服务体系中,注册中心是其核心组件之一。Dubbo通过 注册中心实现了分布式环境中各服务之间的注册与发现,是各个分布式节点之间的纽带。

其主要作用如下:

动态加入:一个服务提供者通过注册中心可以动态地把自己暴露给其他消费者,无须消费者 逐个去更新配置文件。 

动态发现:一个消费者可以动态地感知新的配置、路由规则和新的服务提供者,无须重启服 务使之生效。

动态调整:注册中心支持参数的动态调整,新参数自动更新到所有相关服务节点。

统一配置:避免了本地配置导致每个服务的配置不一致问题。

常见得注册发现服务

 常见的注册中心有zookeeper 、eureka、consul、etcd。

服务提供者Provider 

服务的提供方

服务消费者Consumer

调用远程服务的服务消费方

监控中心Monitor 

主要负责监控统计调用次数和调用时间等。

工作流程

实时效果反馈 

1. Apache Dubbo技术中下列____技术可以做服务注册发现服务。

A Spring

B Nginx

C zookeeper

D Redis

Dubbo配置开发环境_Zookeeper注册中心 


下载Zookeeper镜像 

docker pull zookeeper:3.5.9
启动运行容器

docker run --name zk -d -p 2181:2181
zookeeper:3.5.9
参数:

-d:守护进程运行

-p:映射端口号

进入容器 

docker exec -it zk /bin/bash
参数:

exec:在运行的容器中执行命令

-it:交互式

Dubbo配置开发环境_管理控制台 


介绍 

Dubbo-admin管理平台,图形化的服务管理页面,安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。

下载Dubbo-Admin镜像

docker pull docker.io/apache/dubbo-admin
启动运行容器

docker run -d \
--name dubbo-admin \
-p 9600:8080 \
-e
admin.registry.address=zookeeper://192.168.66.102:2181 \
-e admin.config-center=zookeeper://192.168.66.102:2181 \
-e admin.metadata-report.address=zookeeper://192.168.66.102:2181 \
--restart=always \ docker.io/apache/dubbo-admin
参数:

--restart:always 容器退出时总是重启
admin.registry.address:注册中心
admin.config-center:配置中心
admin.metadata-report.address:元数据中心
可视化界面 

浏览器输入http://192.168.66.100:9600,用户名root 密码 root

Dubbo入门案例_需求介绍 
单体架构

 项目架构

订单服务 

功能如下:

创建订单

根据用户id查询订单详情

用户服务

功能如下:

创建订单

根据用户id查询订单详情 

 Dubbo入门案例_配置开发环境
创建Maven项目

创建项目 

设置JDK版本 

  <profile>
        <id>jdk-1.8</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
          <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
设置项目为父类型

<packaging>pom</packaging>
 修改字符编码

File->Settings->Editor->File Encodings

 配置忽略文件

File->Editor->File Types->Ignore Files and Folders

*.md;*.gitignore;.mvn;.idea;
设置aliyun阿里云maven本地仓库镜像

<repositories>
        <repository>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
</repositories>

————————————————
版权声明:本文为CSDN博主「童小纯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_58719994/article/details/131361638

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

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

相关文章

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

JAVA设计模式介绍

一、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计…

前端Vue自定义手机号文本格式化组件手机号码文本转星号

前端Vue自定义手机号文本格式化组件, 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13231 效果图如下: # cc-format-phone #### 使用方法 使用方法 <!-- phone:手机号 isStar: 是否转星号 --> <cc-format-phone :phon…

2023.7.2

#include <iostream>using namespace std;class Complex { private:int age;int num; public://无参构造Complex(){}//有参构造Complex(int age,int num){this->age age;this->num num;}void show(){cout << "age" << age << "…

chatgpt赋能python:用Python根据IP地址查找具体地址:一个实用的SEO技巧

用Python根据IP地址查找具体地址&#xff1a;一个实用的SEO技巧 在数字化时代&#xff0c;IP地址是一个重要的数字标识符。使用IP地址来发现目标受众的位置是网络营销和搜索引擎优化策略的重要组成部分。在本文中&#xff0c;我们将介绍用Python编程语言根据IP地址查找具体地址…

4. MySQL多表查询练习题

数据库表 CREATE TABLE departments (dept_no CHAR(4) PRIMARY KEY COMMENT 部门编码,dept_name VARCHAR(40) NOT NULL UNIQUE COMMENT 部门名称 ) COMMENT 部门表;CREATE TABLE dept_emp (emp_no INT NOT NULL COMMENT 部门编码,dept_no …

vue路由配置公共布局layout

本篇实现三段式界面 公共布局文件 首先在src下新建layoutPc文件夹&#xff0c;再给layoutPc新建组件 header 、bottm、main三个文件基本确定了一个页面的基本架子&#xff0c;然后再新建一个index.vue文件 comment/AppMain.vue <template><section class"ap…

卷积神经网络狗猫数据集的分类

卷积神经网络狗猫数据集的分类 环境搭建 安装Anaconda 具体安装过程&#xff0c;请自行百度 配置TensorFlow、Keras 创建虚拟环境 输入下面命令&#xff1a; conda create -n ppqppl_tfl python3.6 #tf1是自己为创建虚拟环境取的名字&#xff0c;后面python的版本可以根据自己需…

MyBatis-Plus教程,不敢说是最详细的

一、MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档&…

基于SpringBoot+vue的在线动漫信息平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

SAM 在遥感图像分割上的应用

文章目录 导读方法SAM 模型SAM 的实例分割扩展 RSPrompter概述特征聚合器锚点式Prompter查询式Prompter 实验在 WHU 上的结果在NWPU上的结果在SSDD上的结果 总结参考 Title: RSPrompter: Learning to Prompt for Remote Sensing Instance Segmentation based on Visual Foundat…

Spring Boot 整合视图层技术 FreeMarker

大家好&#xff01;我是今越。简单记录一下在 Spring Boot 框架中如何整合 Freemarker 及使用。 FreeMarker 简介 FreeMarker 是一款模板引擎&#xff1a;即一种基于模板和要改变的数据&#xff0c;并用来生成输出文本&#xff08; HTML 网页&#xff0c;电子邮件&#xff0c;…

Python3 实例(二) | 菜鸟教程(二十)

目录 一、Python 将列表中的头尾两个元素对调 &#xff08;一&#xff09;定义一个列表&#xff0c;并将列表中的头尾两个元素对调。 &#xff08;二&#xff09;实例1 &#xff08;三&#xff09;实例2 &#xff08;四&#xff09;实例3 二、Python 将列表中的指定位置的…

新一代版本依赖管理Vesion Catalog的探索与实践

前言 前段时间使用新版本的Android Studio创建了个项目想测试点东西&#xff0c;项目创建后发现整个Gradle的依赖管理发生了巨大的变化。 先说一下我使用的Android Studio的版本如下。 创建项目后主要变化如下&#xff1a; 原本的.gradle变成了.gradle.kts&#xff0c;也就是…

商业综合体智能管理系统

自主研发的商业综合体智能管理系统和智能硬件&#xff0c;并针对行业不同需求&#xff0c;推出了不同行业的创新解決方案和服务。该系统能够提高商业综合体的管理效率和安全性&#xff0c;为商业综合体的经营和服务增加更多的价值。全自动智能完成无需人工干预&#xff0c;从而…

【企业架构框架】SOGAF架构类型/模式

模式概述 Salesforce 运营、治理和架构框架 (SOGAF) 将新窗口企业架构框架中的 MIT-CISR Salesforce 实施和程序。在此框架内&#xff0c;有四种通用架构类型&#xff1a; 单一系统核心模型模板多系统 每个特定的架构类型对应一个支持 SOGAF 运营模型。架构类型的选择还应包括…

前端搭建名言生成器(内含源码)

目录 前言 名言生成器 页面搭建 功能实现 前言 今天呢我们来给大家展示的&#xff0c;就是一个非常非常简单的名言生成器&#xff0c; 那么它的功能的非常简单&#xff0c;就是我们通过点击按钮&#xff0c;然后可以生成名人名言&#xff0c;然后我们也可以点击按钮将它分享到…

C++图形开发(1):graphics图形库简介与安装

文章目录 1.引入2.安装&#xff08;1&#xff09;在官网下载安装包&#xff08;2&#xff09;安装 3.检验 1.引入 为了帮助大家实现真正的、更有意思的C开发&#xff0c;本人决定开一个C图形开发的专栏&#xff0c;来制作更多的有意思的游戏、程序。 首先我们要了解的&#x…

MySQL 分库分表实战之ShardingSpare(分库分表+读写分离)

文章目录 概要一、安装二、配置2.1、 通用配置2.2、 分片配置2.3、读写分离 三、演练3.1、读写分离3.2、分库分表3.3、分库分表读写分离 4、总结 概要 市面上MySQL分库分表中间件还是很多的&#xff0c;主要分为两大类&#xff1a;应用层依赖类中间件&#xff08;比如sharding…