服务治理框架,RPC框架
- 最早jdk就有RMI
- 单体应用,部分模块导致FullGC 会全盘失败。测试成本高。不能跨语言。
- 啥是架构。技术选型,成本预算,人员分配,风险控制。经验积累
- SOA面向服务架构。
- 两个模块交换数据
- 用过mysql
- XML webservice SOAP CXF
- json 比xml小,解析快。但结构不严谨
- 对象序列化,文件格式最小(二进制)效率最高。但无可读性。不跨平台。

- 服务治理

- 注册中心

架构

- provider启动的时候向注册中心注册。提供自己的IP,接口,方法,版本等。
- consumer向注册中心拿自己要的东西。
- 注册中心给consumer provider的列表。列表发生变化的时候,通过长连接通知consumer变化。
- consumer从注册中心提供的provider列表选择一个进行消费(软负载均衡),如果失败选择另一台。
- provider和consumer在内存中记录服务的调用次数和调用时间,定时发给monitor
demo
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.obsidian</groupId>
<artifactId>dubbo-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<dubbo.version>2.7.3</dubbo.version>
<spring-boot.version>2.1.7.RELEASE</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Aapche Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
dubbo:
protocol:
port: 12345
name: dubbo
scan:
base-packages:
com.obsidian.dubboproducer.service
registry:
address: zookeeper://node2:2181,node3:2181,node4:2181
spring:
application:
name: dubbo-provider
// provider
@Service(version = "1.0.0", interfaceClass = DemoProvider.class, timeout = 5000)
public class DemoProviderImpl implements DemoProvider {
@Override
public String say(String name) {
return "hi: " + name;
}
}
// consumer
@RestController
public class MainController {
@Reference(version = "1.0.0")
private DemoService demoService;
@RequestMapping("main")
public String say() {
return demoService.say("李四");
}
}
//consumer配置文件
spring:
application:
name: DemoConsumer
dubbo:
registry:
address: zookeeper://node2:2181,node3:2181,node4:2181
在ZK中能看到provider
dubbo admin
- 下载代码:
git clone https://github.com/apache/dubbo-admin.git
- 在
dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址。或者在启动jar包的时候 跟配置。ZK的配置。 mvn clean packagejava -jar dubbo-admin-0.1.jar --admin.registry.address=zookeeper://node2:2181 --admin.config-center=zookeeper://node2:2181 --admin.metadata-report.address=zookeeper://node2:2181- 启动后效果
