分布式系统??
若干独立计算机的集合,,,
架构演进--
orm mvc rpc soa
单一架构:扩展困难,协同开发困难
mvc:垂直架构----页面和应用 应用之间交互的问题
分布式: 多个web,多个应用 ,远程过程调用rpc---问题解决
RPC ?
远程过程调用
原理:
A client-------------------------------------B server
A 与 B 先建立连接 序列化 参数 再调用B的接口 B处理之后返回 反序列化
Dubbo
特性
面向接口:
负载均衡:资源最大化利用
服务注册中心:管理服务
高可扩展
流量调度,灰度发布:先局部更新,逐步全局
可视化服务治理与运维治理:
Zookeeper注册中心:
下载https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/
解压之后可以在windows下使用。
monitor
图形化界面管理服务。
从github下载源码,是spring boot项目,可以打包直接使用:
git clone https://github.com/apache/incubator-dubbo-ops
mvn package
E:\Java\MyGitHub\personalCode\dubbo-admin\dubbo-admin-master\dubbo-admin\target\dubbo-admin-0.0.1-SNAPSHOT.jar
application.properties 看到服务端端口号是7001 运行jar包就可以访问。
提供者服务注册:
导入dubbo
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
zookeeper
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper客户端-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
提供服务:
service编写并通过注解自动注册服务:
@Service ----import org.apache.dubbo.config.annotation.Service;
package com.wang.service;
import com.wang.pojo.Ticket;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service
public class TicketServiceImpl implements TicketService {
@Override
public String buyTickets() {
return "西游记";
}
}
dubbo配置
server.port = 8001
#应用名称
dubbo.application.name=TicketProvider
#扫描范围配置
dubbo.scan.base-packages=com.wang.service
#服务远程注册地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
启动应用之后注册成功
消费者使用服务
pom.xml 和提供者相同
配置
server.port= 8002
dubbo.application.name=Dubbo-consumer
dubbo.scan.base-packages=com.wang.service
dubbo.registry.address=zookeeper://127.0.0.1:2181
调用远程服务
package com.wang.service;
import org.apache.catalina.User;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
//spring容器
@Service
public class UserServiceImpl implements UserService {
//消费者使用远程的服务
@Reference
//定义了一个服务端相同路径的接口,以调用
private TicketService ticketService;
@Override
public void butTickets() {
System.out.println(ticketService.buyTickets().toString());
}
}
调用成功:获得远程服务返回的对象。