- 《分布式系统原理与范型》定义:
- “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”
- 分布式系统是建立在网络上之的软件系统。
独立服务器之间依靠RPC(Remote Procedure Call,远程过程调用)。
- 提高机器利用率的资源调度中心(SOA)是关键
- SOA(Service-Orient Architecture面向服务架构),服务治理
- Dubbo是分布式服务框架
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务方 |
Consumer | 调用远程服务的消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务调用次数和调用时间的监控中心 |
Container | 服务器运行容器 |
Dubbo架构
dubbo服务在zookeeper注册时机:首次调用服务引用服务端服务网所在controller
- 服务端HelloServiceImpl.java 注解@Service是Dubbo的@Service不是Spring的,Dubbo3中可以使用@DubboService
# 修改配置dubbo-admin\src\main\resources\application.properties
server.port=7001
dubbo.registry.address=zookeeper://zookeeper服务器ip:2181
# 返回dubbo-admin根目录
mvn clean package
# 运行target目录下jar包
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
# 访问http://localhost:7001,账户密码都是root
Monitor:统计中心 ,记录服务被调用多少次等
# 修改注册中心地址(dubbo-monitor-simple-2.5.3\conf\dubbo.properties):
# dubbo.registry.address=zookeeper://zookeeper服务器ip:2181
# 访问:http://localhost:8080/
用法实例:https://dubbo.apache.org/zh/docsv2.7/user/examples/
4.1.1 启动时检查
- 启动时会在注册中心检查依赖服务是否可用,不可用时会抛出异常
- 在消费方编写初始化容器的main方法启动(tomcat启动方式,必须访问一次action才能初始化spring)
<!--默认是true,抛异常,false:不抛异常-->
<dubbo:consumer check="true"></dubbo:consumer>
服务端提供者配置
<!-- 默认1s-->
<dubbo:provider timeout="2000"></dubbo:provider>
- 配置原则:
- dubbo推荐在Provider上尽量多配置Consumer属性:
- 作为服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数。
- 在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为消费者的缺省值。
- dubbo推荐在Provider上尽量多配置Consumer属性:
- 当出现失败,自动切换并重试其它服务器,dubbo重试的缺省值是2次
<dubbo:provider retries="3"></dubbo:provider>
- 并不是所有的方法都适合设置重试次数
- 幂等方法:适当(当参数一样,无论执行多少次,结果是一样的,例如:查询,修改)
- 非幂等方法:不适当(当参数一样,执行结果不一样,查询、添加)
- (客户端)单独设置某个方法
<dubbo:reference interface="service.HelloService" id="helloService">
<dubbo:method name="sayHello" retries="3"></dubbo:method>
<dubbo:method name="sayNo" retries="0"></dubbo:method>
</dubbo:reference>
- 一个接口,多个(版本)实现类,可以使用定义版本的方式引入
客户端配置
<dubbo:reference version="2.0.0">
<dubbo:method name="sayHello" retries="3"></dubbo:method>
<dubbo:method name="sayNo" retries="0"></dubbo:method>
</dubbo:reference>
服务端配置
<dubbo:service interface="service.HelloService" class="service.impl.HelloServiceImpl01"
version="1.0.0"></dubbo:service>
<dubbo:service interface="service.HelloService" class="service.impl.HelloServiceImpl02"
version="2.0.0"></dubbo:service>
<dubbo:reference interface="service.HelloService" id="helloService" version="2.0.0" stub="stub.HelloServiceStub">
<dubbo:method name="sayHello" retries="3"></dubbo:method>
<dubbo:method name="sayNo" retries="0"></dubbo:method>
</dubbo:reference>
在 Dubbo 中利用本地存根在客户端执行部分逻辑:HelloServiceStub.java
- Stub 必须有可传入 Proxy 的构造函数。
- 在 interface 旁边放一个 Stub 实现,它实现 BarService 接口,并有一个传入远程 BarService 实例的构造函数
修改客户端spring配置文件:
<dubbo:reference loadbalance="roundrabin" interface="service.HelloService" id="helloService" version="2.0.0"
stub="stub.HelloServiceStub">
<dubbo:method name="sayHello" retries="3"></dubbo:method>
<dubbo:method name="sayNo" retries="0"></dubbo:method>
</dubbo:reference>
- zookeeper注册中心宕机,还可以消费dubbo暴露的服务。
- 注册中心全部宕掉后,服务提供者和消费服务者仍能通过本地缓存通讯。
- 服务降级:根据实际情况和流量,对一些服务有策略的停止或者换种简单的方式处理, 从而释放服务的资源来保证核心业务的正常运行。
- 防止分布式服务发生雪崩效应。
- 管理控制台配置服务降级:屏蔽和容错
- 屏蔽:mock=force:return+null,表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。 用来屏蔽不重要的服务不可用时对调用方的影响。
- 容错:mock=fail:return+null,表示消费方对该服务的方法调用在失败后,再返回null,不抛异常。 用来容忍不重要服务不稳定时调用方的影响。
<packaging>pom</packaging>的意思是使用maven分模块管理,都会有一个父级项目,
pom文件一个重要的属性就是packaging(打包类型),一般来说所有的父级项目的packaging都为pom,
packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar包。
Maven POM POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元。
class lombok.javac.apt.LombokProcessor (in unnamed module @0x53c1179a) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x53c1179a
出现这个报错的主要问题是 Lombok 的问题,将 Lombok 的版本换为 1.18.20 版本或以上的就可以了
mysql error 1129: Host 'bio.chip.org' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'。
作者:残梦js 链接:https://www.jianshu.com/p/ad9ddfbe3f3d 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
https://blog.csdn.net/lenny_wants/article/details/124088314
pom.xml添加
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
spring-mvc.xml配置文件添加
<mvc:resources mapping="/js/**" location="/js/"/>
提示: Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
在项目pom.xml中增加如下配置:
<properties>
<!--编译编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>