【微服务架构】-Dubbo生态-Dubbo之Spring XML配置


当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构


当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构


当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

Dubbo概念

====================================================================

Dubbo 属于** 分布式服务架构**中的技术实现:

是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性如下 面向接口代理的高性能RPC调用 智能负载均衡 服务自动注册与发现 高度可扩展能力 运行期流量调度 可视化的服务治理与运维

Dubbo整合Spring XML配置

================================================================================

搭建一个Dubbo项目流程


创建三个项目

dubbo整合spring-xml版项目结构

创建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.8

1.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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

image

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-GhpvpOgy-1712730088038)]

[外链图片转存中…(img-zPel8Skw-1712730088038)]

[外链图片转存中…(img-ZNRan8r7-1712730088039)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整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)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值