Dubbo学习

Dubbo 前言

1.1 大型互联网项目架构目标

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

1.2 集群和分布式

概念

  • 集群:很多”人”一起,干一样的事。
  • 一个业务模块,部署在多台服务器上。
  • 分布式:很多”人”一起,干不一样的事。这些不一样的事,合起来是一件大事。
  • 一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。

厨师例子

Dubbo学习

编程实际

Dubbo学习

Dubbo学习

1.3 架构演进

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo概述

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

官网: http://dubbo.apache.org

Dubbo学习

Zookeeper安装

1.1 下载安装

1、环境准备

ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。

2、上传

将下载的ZooKeeper放到/usr/local/ZooKeeper目录下

#上传zookeeper alt+p
#打开 opt目录
cd /usr/local/zooKeeper
#创建zooKeeper目录
mkdir  zooKeeper
#将zookeeper安装包移动到 /opt/zooKeeper
mv apache-zookeeper-3.5.6-bin.tar.gz /usr/local/zooKeeper

3、解压

将tar包解压到/usr/local/zookeeper目录下

tar -zxvf apache-ZooKeeper-3.5.6-bin.tar.gz

1.2 配置启动

1、配置zoo.cfg

进入到conf目录拷贝一个zoo_sample.cfg并完成配置

#进入到conf目录
cd /usr/local/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/
#拷贝
cp  zoo_sample.cfg  zoo.cfg

修改zoo.cfg

#打开目录
cd /usr/local/zooKeeper
#创建zooKeeper存储目录
mkdir  zkdata
#修改zoo.cfg
vim /usr/local/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/zoo.cfg

Dubbo学习

修改存储目录:dataDir=/usr/local/zooKeeper/zkdata

2、启动ZooKeeper

cd /usr/local/zooKeeper/apache-zooKeeper-3.5.6-bin/bin/
#启动
./zkServer.sh  start

Dubbo学习

看到上图表示ZooKeeper成功启动

3、查看ZooKeeper状态

./zkServer.sh status

zookeeper启动成功。standalone代表zk没有搭建集群,现在是单节点

Dubbo学习

zookeeper没有启动

Dubbo学习

4、开放端口

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload

Dubbo快速入门

Dubbo学习

dubbo-service模块

Dubbo学习

UserService类

package com.Aaron.service.impl;

import org.apache.dubbo.config.annotation.Service;
import com.Aaron.service.UserService;

/**
 * @Author: AlaskaBoo
 * @Date: 2022-09-01 19:47
 **/
//@Service 将该类的对象创建出来,放到Spring的Ioc容器中bean定义
@Service//将这个类提供的方法《服务)对外发布。将访问的地址ip,端口,路径注册到注册中心中
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello() {
        return "Hello Dubbo~~~~";
    }
}

resource

spring包applicationContext.xml


log4j

DEBUG < INFO < WARN < ERROR < FATAL
Global logging configuration
log4j.rootLogger=info, stdout,file
My logging configuration...

#log4j.logger.com.tocersoft.school=DEBUG
#log4j.logger.net.sf.hibernate.cache=debug
## Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/iask.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n

web.xml


        contextConfigLocation
        classpath*:spring/applicationContext.xml

        org.springframework.web.context.ContextLoaderListener

pom依赖


    4.0.0

    com.Aaron
    dubbo-service
    1.0-SNAPSHOT
    war

        8
        8
        UTF-8
        5.1.9.RELEASE
        2.7.4.1
        4.0.0

            javax.servlet
            javax.servlet-api
            3.1.0
            provided

            org.springframework
            spring-context
            ${spring.version}

            org.springframework
            spring-webmvc
            ${spring.version}

            org.slf4j
            slf4j-api
            1.7.21

            org.slf4j
            slf4j-log4j12
            1.7.21

            org.apache.dubbo
            dubbo
            ${dubbo.version}

            org.apache.curator
            curator-framework
            ${zookeeper.version}

            org.apache.curator
            curator-recipes
            ${zookeeper.version}

            com.Aaron
            dubbo-interface
            1.0-SNAPSHOT

                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2

                    9000
                    /

dubbo-web模块

Dubbo学习

UserController

package com.Aaron.controller;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.Aaron.service.UserService;

/**
 * @Author: AlaskaBoo
 * @Date: 2022-09-01 20:01
 **/
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 远程注入
     *
     * @Reference
     * 1.从zookeeper注册中心获取userService的访问url
     * 2.进行远程调用RPC
     * 3.将结果封装为一个代理对象。给变量赋值
     */
    @Reference
    private UserService userService;

    @RequestMapping("/sayHello")
    public String sayHello() {
        return userService.sayHello();
    }
}

resouce

spring包springmvc.xml


log4j

DEBUG < INFO < WARN < ERROR < FATAL
Global logging configuration
log4j.rootLogger=info, stdout,file
My logging configuration...

#log4j.logger.com.tocersoft.school=DEBUG
#log4j.logger.net.sf.hibernate.cache=debug
## Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/iask.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n

web.xml


        springmvc
        org.springframework.web.servlet.DispatcherServlet

            contextConfigLocation
            classpath:spring/springmvc.xml

        springmvc
        *.do

pom.xml


    4.0.0

    com.Aaron
    dubbo-web
    1.0-SNAPSHOT
    war

        8
        8
        UTF-8
        5.1.9.RELEASE
        2.7.4.1
        4.0.0

            javax.servlet
            javax.servlet-api
            3.1.0
            provided

            org.springframework
            spring-context
            ${spring.version}

            org.springframework
            spring-webmvc
            ${spring.version}

            org.slf4j
            slf4j-api
            1.7.21

            org.slf4j
            slf4j-log4j12
            1.7.21

            org.apache.dubbo
            dubbo
            ${dubbo.version}

            org.apache.curator
            curator-framework
            ${zookeeper.version}

            org.apache.curator
            curator-recipes
            ${zookeeper.version}

            com.Aaron
            dubbo-interface
            1.0-SNAPSHOT

                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2

                    8000
                    /

dubbo-interface

Dubbo学习

UserService

package com.Aaron.service;

/**
 * @Author: AlaskaBoo
 * @Date: 2022-09-01 19:45
 **/
public interface UserService {
    public String sayHello();
}

启动结果

Dubbo学习

Dubbo高级特性

一、dubbo-admin

Dubbo学习

二、dubbo-admin安装

1、环境准备

dubbo-admin 是一个前后端分离的项目。前端使用vue,后端使用springboot,安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk,maven,nodejs

安装node (如果当前机器已经安装请忽略)

因为前端工程是用vue开发的,所以需要安装node.js,node.js中自带了npm,后面我们会通过npm启动

下载地址

https://nodejs.org/en/

Dubbo学习

2、下载 Dubbo-Admin

进入github,搜索dubbo-admin

https://github.com/apache/dubbo-admin

下载:

Dubbo学习

3、把下载的zip包解压到指定文件夹(解压到那个文件夹随意)

Dubbo学习

4、修改配置文件

解压后我们进入…\dubbo-admin-develop\dubbo-admin-server\src\main\resources目录,找到 application.properties 配置文件 进行配置修改

Dubbo学习

修改zookeeper地址

Dubbo学习
centers in dubbo2.7
admin.registry.address=zookeeper://192.168.121.128:2181
admin.config-center=zookeeper://192.168.121.128:2181
admin.metadata-report.address=zookeeper://192.168.121.128:2181

admin.registry.address注册中心
admin.config-center 配置中心
admin.metadata-report.address元数据中心

5、打包项目

在 dubbo-admin-develop 目录执行打包命令

建议在cmd中执行,先换淘宝镜像

npm config set registry https://registry.npm.taobao.org

Dubbo学习
mvn  clean package
mvn clean package -Dmaven.test.skip=true

Dubbo学习

6、启动后端

切换到目录

dubbo-Admin-develop\dubbo-admin-distribution\target>

执行下面的命令启动 dubbo-admin,dubbo-admin后台由SpringBoot构建。

java -jar .\dubbo-admin-0.1.jar

Dubbo学习

7、前台后端

dubbo-admin-ui 目录下执行命令

npm run dev
npm run serve(我安装的16.11.1的node.js)

8、访问

浏览器输入。用户名密码都是root

http://localhost:8081/

Dubbo学习

三、dubbo-admin简单使用

Dubbo学习

注意:Dubbo Admin【服务Mock】【服务统计】将在后续版本发布….

在上面的步骤中,我们已经进入了Dubbo-Admin的主界面,在【快速入门】章节中,我们定义了服务生产者、和服务消费者,下面我们从Dubbo-Admin管理界面找到这个两个服务

1、点击服务查询

2、查询结果

Dubbo学习

A:输入的查询条件com.Aaron.service.UserService

B:搜索类型,主要分为【按服务名】【按IP地址】【按应用】三种类型查询

C:搜索结果

3.1.4 dubo-admin查看详情

我们查看com.Aaron.service.UserService (服务提供者)的具体详细信息,包含【元数据信息】

1)点击详情

Dubbo学习

从【详情】界面查看,主要分为3个区域

A区域:主要包含服务端 基础信息比如服务名称、应用名称等

B区域:主要包含了生产者、消费者一些基本信息

C区域:是元数据信息,注意看上面的图,元数据信息是空的

我们需要打开我们的生产者配置文件加入下面配置


重新启动生产者,再次打开Dubbo-Admin

这样我们的元数据信息就出来了

Dubbo学习

四、常用高级配置

1、序列化

Dubbo学习

Dubbo学习

在pojo中实体加Serializable

package com.Aaron.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @Author: AlaskaBoo
 * @Date: 2022-09-02 17:12
 * 注意!!!

 * 将来所有的pojo类都需要实现注意!!!

 * 将来所有的pojo类都需要实现Serializable接口接口
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private int id;
    private String username;
    private String password;
}

interface中继承依赖

Dubbo学习

2、地址缓存

Dubbo学习

3、超时与重试(设置超时时间)

Dubbo学习

Dubbo学习

Dubbo学习

重试

Dubbo学习

4、多版本

Dubbo学习

Dubbo学习

Dubbo学习

5、负载均衡

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

Dubbo学习

6、容错机制

Dubbo学习

7、服务降级

Dubbo学习

Dubbo学习

搭建Zookeeper集群

1.1 搭建要求

真实的集群是需要部署在不同的服务器上的,但是在我们测试时同时启动很多个虚拟机内存会吃不消,所以我们通常会搭建 伪集群,也就是把所有的服务都搭建在一台虚拟机上,用端口进行区分。

我们这里要求搭建一个三个节点的Zookeeper集群(伪集群)。

1.2 准备工作

重新部署一台虚拟机作为我们搭建集群的测试服务器。

(1)安装JDK 【此步骤省略】。

(2)Zookeeper压缩包上传到服务器
(3)将Zookeeper解压 ,建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录

/usr/local/zookeeper-cluster/zookeeper-1

/usr/local/zookeeper-cluster/zookeeper-2

/usr/local/zookeeper-cluster/zookeeper-3

[root@localhost ~]# mkdir /usr/local/zookeeper-cluster
[root@localhost ~]# cp -r  apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-1
[root@localhost ~]# cp -r  apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-2
[root@localhost ~]# cp -r  apache-zookeeper-3.5.6-bin /usr/local/zookeeper-cluster/zookeeper-3

(4)创建data目录 ,并且将 conf下zoo_sample.cfg 文件改名为 zoo.cfg

mkdir /usr/local/zookeeper-cluster/zookeeper-1/data
mkdir /usr/local/zookeeper-cluster/zookeeper-2/data
mkdir /usr/local/zookeeper-cluster/zookeeper-3/data

mv  /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo_sample.cfg  /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
mv  /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo_sample.cfg  /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
mv  /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo_sample.cfg  /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

(5) 配置每一个Zookeeper 的dataDir 和 clientPort 分别为2181 2182 2183

修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data

修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data

修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data

1.3 配置集群

(1)在每个zookeeper的 data 目录下创建一个 myid 文件,内容分别是1、2、3 。这个文件就是记录每个服务器的ID

echo 1 >/usr/local/zookeeper-cluster/zookeeper-1/data/myid
echo 2 >/usr/local/zookeeper-cluster/zookeeper-2/data/myid
echo 3 >/usr/local/zookeeper-cluster/zookeeper-3/data/myid

(2)在每一个zookeeper 的 zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表。

集群服务器IP列表如下

vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

server.1=192.168.149.135:2881:3881
server.2=192.168.149.135:2882:3882
server.3=192.168.149.135:2883:3883

解释:server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口

1.4 启动集群

启动集群就是分别启动每个实例。

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start

Dubbo学习

启动后我们查询一下每个实例的运行状态

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status

先查询第一个服务

Dubbo学习

Mode为follower表示是 跟随者(从)

再查询第二个服务Mod 为leader表示是 领导者(主)

Dubbo学习

查询第三个为跟随者(从)

Dubbo学习

1.5 模拟集群异常

(1)首先我们先测试如果是从服务器挂掉,会怎么样

把3号服务器停掉,观察1号和2号,发现状态并没有变化

/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh stop

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status

Dubbo学习

由此得出结论,3个节点的集群,从服务器挂掉,集群正常

(2)我们再把1号服务器(从服务器)也停掉,查看2号(主服务器)的状态,发现已经停止运行了。

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh stop

/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status

Dubbo学习

由此得出结论,3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数。

(3)我们再次把1号服务器启动起来,发现2号服务器又开始正常工作了。而且依然是领导者。

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start

/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status

Dubbo学习

(4)我们把3号服务器也启动起来,把2号服务器停掉,停掉后观察1号和3号的状态。

/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh stop

/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status

Dubbo学习

发现新的leader产生了~

由此我们得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader

(5)我们再次测试,当我们把2号服务器重新启动起来启动后,会发生什么?2号服务器会再次成为新的领导吗?我们看结果

/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start

/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status

Dubbo学习

我们会发现,2号服务器启动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。

由此我们得出结论,当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者。

Original: https://www.cnblogs.com/Alaskaboo/p/16651731.html
Author: Alaskaboo
Title: Dubbo学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586490/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • centos中NAT模式下静态IP连接外网

    使用linux虚拟机时,通常会用到yum命令来安装软件,然而这个命令需要连外网下载软件,用maven下载jar包也需要外网。虚拟机在内网可以互相ping通,然而ping不了外网,于…

    Java 2023年6月16日
    077
  • SpringBoot自动装配

    SpringBoot是对Spring的一种扩展,其中比较重要的扩展功能就是自动装配:通过注解对常用的配置做默认配置,简化xml配置内容。本文会对Spring的自动配置的原理和部分源…

    Java 2023年6月8日
    0101
  • 基于Javaweb,SSM火车订票系统

    一、项目简介 本项目为火车订票系统,主要分为管理员、普通用户二大角色。主要功能请看系统功能介绍。本系整个框架是基于ssm搭建,使用maven来管理依赖,使用MySQL作为数据库,使…

    Java 2023年6月8日
    080
  • Nginx增加网页认证功能

    Nginx增加网页认证功能 增加认证功能模块 ngx_http_auth_basic_module 模块实现让访问者,只有输入正确的用户密码才允许访问web内容。web上的一些内容…

    Java 2023年6月8日
    099
  • 一篇不太正经的个人介绍

    你好啊,这里是程序员田同学。 在网上胡写乱画也快半年了,公众号上也连更了一个多月,新关注的朋友就比较疑惑,这家伙是谁呀?整天又在写些什么?为啥要关注他呀? 今天有必要写一篇文章介绍…

    Java 2023年6月8日
    067
  • 基于crudapi增删改查接口后端Java SDK二次开发之环境搭建(一)

    基于crudapi后端Java SDK二次开发之环境搭建(一) 背景 目前crudapi增删改查接口系统的后台Java API服务已经全部可用,为了满足复杂的场景,可以通过集成Ja…

    Java 2023年6月6日
    083
  • 数组

    数组介绍: 可以存放同一类型的数据,包括基本数据类型和引用类型 *数组也是一种数据类型,引用类型 数组的声明和创建: 动态初始化创建–> 数据类型[] 数组名 =…

    Java 2023年6月16日
    061
  • MQ的消息丢失/重复/积压的问题解决

    在我们实际的开发过程中,我们肯定会用到MQ中间件,常见的MQ中间件有kafka,RabbitMQ,RocketMQ。在使用的过程中,我们必须要考虑这样一个问题,在使用MQ的时候,我…

    Java 2023年6月7日
    079
  • 分布式电商营销系统的实践之路:抽象规则

    前言 去年供职于一家电商公司,被分配到做商城营销体系的开发设计。本文章记录了我这个小菜鸟在营销设计中遇到的坑坑洼洼,以及在重构中的思路。 线性思维,线性设计 首先我们列一列营销组件…

    Java 2023年6月5日
    094
  • MySQL 优化篇(二)

    分析查询语句:EXPLAIN 定位了查询慢的SQL之后,我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句。DESCRIBE 语句的使用方法与EXPLAIN语…

    Java 2023年6月8日
    089
  • Java四大引用详解:强引用、软引用、弱引用、虚引用

    面试官考察Java引用会问到强引用、弱引用、软引用、虚引用,具体有什么区别?本篇单独来详解 @mikechen Java引用 从JDK 1.2版本开始,对象的引用被划分为4种级别,…

    Java 2023年6月15日
    0100
  • java基础-集合

    以下为本人的学习笔记 1.集合框架概述 1.1集合框架 的作用 在实际开发中,我们经常会对一组相同类型的数据进行统一管理操作。到目前为止,我们可以使用数组结构,链表结构,二叉树来实…

    Java 2023年6月15日
    0103
  • 2、自动回复消息

    上一篇已经接入公众平台,现在来说下消息回复 接入公众平台与消息处理区别: 接入公众平台 : method = RequestMethod.GET; 消息处理 : method = …

    Java 2023年6月13日
    067
  • IDEA 启动报错 java.nio.charset.MalformedInputException: Input length=2

    idea 启动提示 other.xml 无法解析 …… cannot parse file other.xml: java.nio.charset.Malf…

    Java 2023年5月29日
    071
  • Spring Cloud服务注册-Eureka介绍和部署

    1、Spring-Cloud Euraka介绍 Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eur…

    Java 2023年5月30日
    084
  • autocomplete=”off”清空输入框

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击 input文本输入框就会出现之前输入的文本…

    Java 2023年6月5日
    087
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球