大家好呀,这里是知了小姐姐。
毕业季虽然过了,但是秋招已经在来的路上了,最近有小伙伴向知了小姐姐吐槽,说Java的面试越来越难了。确实,虽然有疫情影响,但是企业的招聘要求并未降低,Java面试中最常被问到的就是分布式技术,今天知了小姐姐就来给大家分享分布式技术之dubbo
1:分布式的定义
定义:Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
2:分布式的快速上手
Dubbo分为服务提供者 和 服务消费者
2.1服务提供者
Dubbo和spring只需简单整合就能快速上手
1:pom引入spring的基础依赖包和dubbo的包以及调度中心zookeeper的包
<dependencies> <!-- spring begin --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- spring end --> <!-- dubbo begin --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <!-- dubbo end --> <!-- 注册中心zookeeper begin --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency> <!-- 注册中心zookeeper end --> <!-- log begin --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <artifactId>jms</artifactId> <groupId>javax.jms</groupId> </exclusion> <exclusion> <artifactId>mail</artifactId> <groupId>javax.mail</groupId> </exclusion> </exclusions> </dependency> <!-- log end --> <!-- other begin --> <dependency> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> <version>3.2.0.Final</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <!-- other end --> </dependencies>
2:写配置文件
<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" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.zlt.dubbo"></context:component-scan> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo_provider" /> <!-- 使用zookeeper广播注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.zlt.dubbo.DubboService" ref="dubboService" /> </beans>
3:按照以前spring的写法
定义接口,接口定义好了之后再定义我们的实现类。
4:读取配置文件把项目启动起来
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); ((AbstractApplicationContext)ac).start(); System.out.println("提供者启动"); //就是服务不停 System.in.read();
2.2 消费端 consumer
1:引入配置文件:还是包含spring dubbo zookeeper但是多了一个 提供者的坐标引入
<dependencies> <!-- spring begin --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- spring end --> <!-- dubbo begin --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <!-- dubbo end --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency> <!-- log begin --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <artifactId>jms</artifactId> <groupId>javax.jms</groupId> </exclusion> <exclusion> <artifactId>mail</artifactId> <groupId>javax.mail</groupId> </exclusion> </exclusions> </dependency> <!-- log end --> <!-- other begin --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <!-- 引入服务端的坐标 --> <dependency> <groupId>com.zlt</groupId> <artifactId>dubbo-provider</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
2:写入配置文件
<?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" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="dubbo_consumer" /> <!-- 使用zookeeper广播注册中心暴露发现服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="dubboService" interface="com.zlt.dubbo.DubboService" /> </beans>
3:写调用的测试类
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //在服务端里面拿到 dubboservice DubboService ds = (DubboService) ac.getBean("dubboService"); System.out.println(ds.sayHello("覃先生"));
3:调度中心的配置
把sample去掉就可以了
4:ssm中把dubbo揉进去
第一步就在在parent里面加入 dubbo还有 zookeeper 等等jar包。
第二步就是在service类里面 引入duboo相关的jar。同时里面所有的pojo要继承序列化
第三步就是改造我们service的applicationContext配置文件,同时改造pom文件把jar改成war。同时引入tomcat插件。在增加一个web.xml 把spring的监听放入 同时删除web项目里面的监听
第四步就是在web项目里面引入dubbo等相关的jar,修改springmvc的配置文件引入duboo相关的配置。
第五步就是先把zookeeper启动了 然后启动service的项目 在启动web的项目。
5:dubbo 的监控 root root
你学会了吗?
分享到这儿,相信小伙伴们已经对dubbo有了一定的认识。
如果还有不清楚的、想要深入了解dubbo的小伙伴们,关注公众号【汇智知了堂】,获取更多干货哦!