当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
====================================================================
Dubbo 属于** 分布式服务架构**中的技术实现:
是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性如下 面向接口代理的高性能RPC调用 智能负载均衡 服务自动注册与发现 高度可扩展能力 运行期流量调度 可视化的服务治理与运维
================================================================================
创建三个项目
创建maven父工程 dubbo-spring-xml
pom.xml配置
<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”>
4.0.0
org.dk
dubbo-spring-xml
0.0.1-SNAPSHOT
pom
dubbo-spring-xml-provider
dubbo-spring-xml-customer
dubbo-spring-xml-api
<java.version>1.7</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jsp.version>2.2</jsp.version>
<jstl.version>1.2</jstl.version>
<servlet.version>3.1.0</servlet.version>
<spring-framework.version>4.3.10.RELEASE</spring-framework.version>
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
javax
javaee-web-api
7.0
provided
org.springframework
spring-webmvc
${spring-framework.version}
javax.servlet
jstl
${jstl.version}
javax.servlet
javax.servlet-api
${servlet.version}
provided
javax.servlet.jsp
jsp-api
${jsp.version}
provided
org.springframework
spring-tx
${spring-framework.version}
org.slf4j
slf4j-api
${slf4j.version}
log4j
log4j
1.2.16
org.slf4j
jcl-over-slf4j
${slf4j.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-core
${logback.version}
ch.qos.logback
logback-access
${logback.version}
com.fasterxml.jackson.core
jackson-databind
2.8.6
com.fasterxml.jackson.core
jackson-databind
2.8.6
com.fasterxml.jackson.core
jackson-annotations
2.8.6
com.fasterxml.jackson.core
jackson-core
2.8.6
commons-io
commons-io
2.3
org.apache.commons
commons-lang3
3.2
org.springframework
spring-test
${spring-framework.version}
test
org.springframework
spring-jdbc
${spring-framework.version}
test
org.aspectj
aspectjrt
1.8.6
org.aspectj
aspectjtools
1.8.9
org.aspectj
aspectjweaver
1.7.4
junit
junit
4.11
test
com.alibaba
dubbo
2.5.8
redis.clients
jedis
2.9.0
commons-fileupload
commons-fileupload
1.3.2
org.apache.maven.plugins
maven-compiler-plugin
${java.version}${java.version}
UTF-8
创建API接口工程 dubbo-spring-xml-api
对外暴露RPC接口模块
POM.XML
4.0.0
org.dk
dubbo-spring-xml
0.0.1-SNAPSHOT
dubbo-spring-xml-api
org.apache.maven.plugins
maven-compiler-plugin
1.81.8
UTF-8
实体Bean配置
public class DefaultBean {
private String str;
private String methodName;
private long timestamp;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@Override
public String toString() {
return “DefaultBean [str=” + str + “, methodName=” + methodName + “, timestamp=” + timestamp + “]”;
}
}
业务逻辑层Service
public interface DefaultApiService {
/**
-
默认方法
-
@param str
-
@return
*/
String defaultMethod(String str);
}
创建服务提供者组件 dubbo-spring-xml-provider
需要将dubbo-spring-xml-api 依赖引入dubbo-spring-xml-provider中。
pom.xml
javax
javaee-web-api
provided
org.springframework
spring-webmvc
javax.servlet
jstl
javax.servlet
javax.servlet-api
provided
javax.servlet.jsp
jsp-api
provided
org.springframework
spring-tx
org.slf4j
slf4j-api
log4j
log4j
org.slf4j
jcl-over-slf4j
ch.qos.logback
logback-classic
ch.qos.logback
logback-core
ch.qos.logback
logback-access
com.fasterxml.jackson.core
jackson-databind
com.fasterxml.jackson.core
jackson-databind
com.fasterxml.jackson.core
jackson-annotations
com.fasterxml.jackson.core
jackson-core
commons-io
commons-io
org.springframework
spring-test
test
org.springframework
spring-jdbc
test
org.aspectj
aspectjrt
org.aspectj
aspectjtools
org.aspectj
aspectjweaver
junit
junit
test
com.alibaba
dubbo
redis.clients
jedis
org.niugang
dubbo-spring-xml-api
0.0.1-SNAPSHOT
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
${java.version}${java.version}
org.apache.maven.plugins
maven-war-plugin
2.3
false
编写 service对外暴露接口实现类
public class DefaultServiceImpl implements DefaultApiService {
//模拟数据
public static List list = new ArrayList();
static {
DefaultBean defaultBean = new DefaultBean();
defaultBean.setStr(“1”);
defaultBean.setMethodName(“defaultMethod”);
defaultBean.setTimestamp(System.currentTimeMillis());
list.add(defaultBean);
DefaultBean defaultBean2 = new DefaultBean();
defaultBean2.setStr(“2”);
defaultBean2.setMethodName(“defaultMethod2”);
defaultBean2.setTimestamp(System.currentTimeMillis());
list.add(defaultBean2);
DefaultBean defaultBean3 = new DefaultBean();
defaultBean3.setStr(“3”);
defaultBean3.setMethodName(“defaultMethod3”);
defaultBean3.setTimestamp(System.currentTimeMillis());
list.add(defaultBean);
DefaultBean defaultBean4 = new DefaultBean();
defaultBean4.setStr(“4”);
defaultBean4.setMethodName(“defaultMethod4”);
defaultBean4.setTimestamp(System.currentTimeMillis());
list.add(defaultBean4);
DefaultBean defaultBean5 = new DefaultBean();
defaultBean5.setStr(“5”);
defaultBean5.setMethodName(“defaultMethod5”);
defaultBean5.setTimestamp(System.currentTimeMillis());
list.add(defaultBean5);
}
@Override
public String defaultMethod(String str) {
Random random = new Random();
int nextInt = random.nextInt(6);
String res = null;
if (nextInt > 0) {
DefaultBean defaultBean = list.get(nextInt - 1);
res = defaultBean.getStr() + “#” + defaultBean.getMethodName() + “#” + defaultBean.getTimestamp()
- “if-defaultMethod:” + str + “^^^^^^^^^^^^”;
} else {
DefaultBean defaultBean = list.get(nextInt);
res = defaultBean.getStr() + “#” + defaultBean.getMethodName() + “#” + defaultBean.getTimestamp()
- “else-defaultMethod:” + str + “^^^^^^^^^^^^”;
}
return res;
}
application.xml配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=“http://www.springframework.org/schema/p”
xmlns:context=“http://www.springframework.org/schema/context”
xmlns:mvc=“http://www.springframework.org/schema/mvc”
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package=“org.niugang” />
<mvc:annotation-driven />
dubbo服务端provider.xml配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:dubbo=“http://code.alibabatech.com/schema/dubbo”
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name=“hello-world-app” />
<dubbo:registry address=“redis://localhost:6379”
timeout=“30000”>
<dubbo:parameter key=“max.idle” value=“10” />
<dubbo:parameter key=“min.idle” value=“5” />
<dubbo:parameter key=“max.active” value=“20” />
<dubbo:parameter key=“max.total” value=“100” />
</dubbo:registry>
<dubbo:protocol name=“dubbo” port=“20880” accesslog=“true” />
<dubbo:service interface=“org.niugang.service.DefaultApiService”
ref=“defaultService” version=“1.0.0” />
<dubbo:monitor protocol=“registry”></dubbo:monitor>
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-GhpvpOgy-1712730088038)]
[外链图片转存中…(img-zPel8Skw-1712730088038)]
[外链图片转存中…(img-ZNRan8r7-1712730088039)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
[外链图片转存中…(img-VsQPO1ID-1712730088039)]
且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
[外链图片转存中…(img-kFa45mTU-1712730088039)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!