所需资料下载
https://download.csdn.net/download/qq_36297434/11693161
一:SOA
1:英文名称(Service Oriented Ambiguity)
2:中文名称:面向服务架构
2.1:有一个专门提供服务单元.
2.2:其他所有单元都调用这个服务.
3:SOA定位:
3.1:如何设计项目,让开发时更有效率.
3.2:SOA是一种思想
4:之前项目架构设计
4.1:在公司项目不允许所有项目都访问数据库.
4.2:开发时,数据库访问层代码可能出现冗余
5:使用SOA架构
5.1:专门访问数据库服务(项目).
5.2:开发时可以实现,数据访问控制和代码复用
6:实现SOA架构时,常用服务.
6.1:Dubbo 做为服务
6.2:WebService 做为服务.
6.3:Dubbox 做为服务.
6.4:服务方就是web项目,调用web项目的控制器.
6.4.1:使用HttpClient可以调用其他项目的控制器.
二. RPC
1:英文名称(Remote Procedure Call Protocol)
2:中文名称:远程过程调用协议
3:RPC解析:客户端(A)通过互联网调用远程服务器,不知道远程服务器具体实现,只知道远程服务器提供了什么功能.
4.:RPC最大优点是数据安全性.
三.Dubbo简介
Dubbo是一个分布式、高性能、透明化的RPC服务框架,作用是提供服务自动注册、自动发现等高效服务治理方案.
3:Dubbo架构图
1.1:Provider :提供者,服务发布方
1.2:Consumer:消费者, 调用服务方
1.3:Container:Dubbo容器,依赖于Spring容器.
1.4:Registry:注册中心
当Container启动时把所有可以提供的服务列表上Registry中进行注册。作用:告诉Consumer提供了什么服务和服务方在哪里.
1.5:Monitor:监听器
1.6:虚线都是异步访问,实线都是同步访问
1.7:蓝色虚线:在启动时完成的功能
1.8:红色虚线(实线)都是程序运行过程中执行的功能
1.9 所有的角色都是可以在单独的服务器上.所以必须遵守特定的协议.
4:运行原理:
4.1:启动容器,相当于在启动Dubbo的Provider
4.2:启动后会去注册中心进行注册.注册所有可以提供的服务列表
4.3:在Consumer启动后会去Registry中获取服务列表和Provider的地址.进行订阅.
4.4:当Provider有修改后,注册中心会把消息推送给Consummer。使用了观察者设计模式(又叫发布/订阅设计模式)
4.5:根据获取到的Provider地址,真实调用Provider中功能。在Consumer方使用了代理设计模式,创建一个Provider方类的一个代理对象,通过代理对象获取Provider中真实功能,起到保护Provider真实功能的作用.
4.6:Consumer和Provider每隔1分钟向Monitor发送统计信息,统计信息包含,访问次数,频率等。
四.Dubbo支持的注册中心
1. Zookeeper
优点:支持网络集群
缺点:稳定性受限于Zookeeper
2:Redis
优点:性能高.
缺点:对服务器环境要求较高.
3. Multicast
优点:面中心化,不需要额外安装软件.
缺点:建议同机房(局域网)内使用
4:Simple
适用于测试环境.不支持集群.
五:安装ZooKeeper
https://blog.csdn.net/qq_36297434/article/details/98350234
六. Dubbo支持的协议
1:Dubbo:Dubbo官方推荐的协议.
本质:使用NIO和线程池进行处理.
缺点:大文件传输时可能出现文件传输失败问题.
2:RMI,JDK提供的协议,远程方法调用协议.
缺点:偶尔连接失败.
优点:JDK原生,不需要进行额外配置(导入jar)
3:Hession
优点:基于http协议,http请求支持.
缺点:需要额外导入jar,并在短连接时性能低
七:一个Duboo项目实例
执行项目时要快开启ZooKeeper
1:provider
1.1:新建一个provider的服务接口Maven项目(dubbo-service)
1.1.1:新建包hhxy.service,新建如下接口
DemoService
package hhxy.service;
public interface DemoService {
String demo(String name);
}
1.2:新建一个provider的服务实现Maven项目(dubbo-service-impl)
1.2.1:配置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">
<modelVersion>4.0.0</modelVersion>
<groupId>hhxy</groupId>
<artifactId>dubbo-service-impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>hhxy</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- 访问zookeeper的客户端jar -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
</project>
1.2.2:配置applicationContest-dubbo.xml(具体位置看1.2.6)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 给当前Provider自定义个名字 -->
<dubbo:application name="dubbo-service"/>
<!-- 配置注册中心 -->
<dubbo:registry address="192.168.126.129:2181" protocol="zookeeper"></dubbo:registry>
<!-- 配置端口 -->
<dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
<!-- 注册功能 -->
<dubbo:service interface="hhxy.service.DemoService" ref="demoServiceImpl"></dubbo:service>
<bean id="demoServiceImpl" class="hhxy.service.impl.DemoServiceImpl"></bean>
</beans>
1.2.3:新建包hhxy.service.impl,包下新建如下类
DemoServiceImpl:
package hhxy.service.impl;
import hhxy.service.DemoService;
public class DemoServiceImpl implements DemoService{
@Override
public String demo(String name) {
// TODO Auto-generated method stub
return "传递来的name:"+ name;
}
}
1.2.4:新建包hhxy.test,包下新建测试类
package hhxy.test;
import com.alibaba.dubbo.container.Main;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//第一种启动方式
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("启动成功");
System.in.read();
//第二种启动方式,要求配置文件路径为META-INF/spring/*.xml
Main.main(args);
}
}
2:consumer
2.1:新建consumer的一个Maven项目(dubbo-consumer)
2.1.1:配置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">
<modelVersion>4.0.0</modelVersion>
<groupId>hhxy</groupId>
<artifactId>dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>hhxy</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- 访问zookeeper的客户端jar -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
</project>
2.1.2:配置applicationContext-dubbo.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 给当前Provider自定义个名字 -->
<dubbo:application name="dubbo-consumer"/>
<!-- 配置注册中心 -->
<!-- 集群时,,address用逗号分隔 -->
<dubbo:registry address="192.168.126.129:2181" protocol="zookeeper"></dubbo:registry>
<!-- 配置注解扫描 -->
<dubbo:annotation package="hhxy.consumer.service.impl"/>
<bean id="testImpl" class="hhxy.consumer.service.impl.TestServiceImpl"></bean>
</beans>
2.1.3:新建包hhxy.consumer.service,包下新建如下类:
TestService:
package hhxy.consumer.service;
public interface TestService {
void test();
}
2.1.4:新建hhxy.consumer.service.impl包,包下新建如下类
TestServiceImpl:
package hhxy.consumer.service.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import hhxy.consumer.service.TestService;
import hhxy.service.DemoService;
public class TestServiceImpl implements TestService{
@Reference
private DemoService demoService;
@Override
public void test() {
// TODO Auto-generated method stub
//调用Provice中提供的功能
String name=demoService.demo("李伟康");
System.out.println(name);
}
}
2.1.5:新建hhxy.consumer.test包,包下测试类
package hhxy.consumer.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import hhxy.consumer.service.TestService;
import hhxy.consumer.service.impl.TestServiceImpl;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
TestService testService=ac.getBean("testImpl",TestServiceImpl.class);
testService.test();
}
}
八:Admin管理界面
本质就是一个web项目,获取注册中心内Provider注册的信息.用页面呈现出来.
实现步骤:
1:把dubbo-admin-2.5.3.war上传到服务器tomcat中。
2:启动tomcat完成后关闭tomcat,删除上传的dubbo-admin-2.5.3.war,因为需要修改解压后的文件夹,如果不删除.war文件,下次重启tomcat会还原成未修改状态。
3: 进入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行为zookeeper的ip和端口
4: 第二行和第三行为管理界面的用户名和密码
5:启动ZooKeeper,tomcat, 在浏览器地址栏访问tomcat中dubbo项目
九:Maven项目的debug
1:右键项目 --> debug as --> 最下面 debug configuration
2:选择source
3:删除默认default
4:点击add
5:选择对应的项目
6:点击debug
十 一:Maven打包插件Assembly
1:在dubbo的provider项目(实现类项目)中pom.xml配置assembly插件信息
<!-- 指定项目的打包插件信息 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- 指定打包描述文件的位置:相对项目根目录的路径 -->
<!-- assembly打包的描述文件 -->
<descriptor>assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
2:在项目根目录下新建assembly文件夹
3:在assembly文件夹中新建assembly.xml
<?xml version='1.0' encoding='UTF-8'?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!-- 该字符会添加到最终tar.gz包的名称后面,作为后缀 -->
<id>assembly</id>
<!-- 指定打包的格式为tar.gz,该类型压缩包在linux中比较常见 -->
<formats>
<format>tar.gz</format>
</formats>
<!-- 在tar.gz压缩包中是否包含根文件夹,该根文件夹名称和tar.gz去掉id后缀一致 -->
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<!-- 将项目根路径下assembly/bin路径中的内容打包到压缩包中的根目录下的bin目录中 -->
<fileSet>
<!-- 相对项目根路径的相对路径 -->
<directory>assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<!-- 设置最终tar.gz中该文件夹下的权限,跟linux权限写法一致 -->
<fileMode>0755</fileMode>
</fileSet>
<!-- 将项目根路径下assembly/conf路径中的内容打包到压缩包中的根目录下的conf目录中 -->
<fileSet>
<directory>assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<!-- 设置其linux权限 -->
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<!-- 将所有依赖的jar包打包到压缩包中的根目录下的lib目录中 -->
<!-- 此lib目录中包含自己开发的项目jar包以及demo_service.jar,还有第三方的jar包 -->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
4:处理assembly文件夹
4.1:解压下载的dubbo-monitor-simple-2.5.3-assembly.tar.gz压缩包,把解压后的bin和conf粘贴到项目下assembly文件夹中.
4.2:清空conf/dubbo.properties中内容.
5.开始打包
5.1:右键项目--> maven install
5.2:在target下出现:项目名-版本-assembly.tar.gz压缩包
6:运行
把压缩包复制到window或linux中。window中使用start.bat启动,关闭命令窗口关闭服务;linux中使用start.sh启动使用stop.sh关闭。