文章目录
基础概念
什么是分布式?
分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。
Zookeeper充当什么角色
服务注册中心,所有的服务都注册到Zookeeper中,之后各个服务之间的通信便可以通过RPC框架,去调用服务注册中心中的服务进行通信
RPC框架Dubbo
Dubbo是一款高性能、轻量级的开源Java RPC框架,他提供了三大核心能力
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自动注册和发现
远程调用流程
服务提供者(Provide):暴露服务的提供方,服务提供者在启动时,向注册中心注册自己提供的服务
服务消费者(Consumer):调用远程服务的消费方,服务消费者在启动时,向注册中心订阅自己所需要的服务
注册中心(Registry):注册中心返回服务提供者地址列表给消费者
监控中心(Monitor):对于消费者和提供者的监控
操作
1、下载Zookeeper
docker pull zookeeper
docker run -p 2181:2181 --privileged=true --name zookeeper -d zookeeper
2、导入依赖(Zookeeper和Dubbo的)
<!--Dubbo-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--Zookeeper客户端-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--Zookeeper服务端-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.6</version>
</dependency>
<!--Zk服务端依赖-->
<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>
3、服务提供者
3.1、yml配置
dubbo:
application:
name: service-provide # 服务应用名字
registry:
address: zookeeper://ip:2181 #注册中心地址(ip为能访问到Zookeeper的ip)
scan:
base-packages: com.itcast.dubboservice # 提供的服务,需要扫描的包
3.2、提供服务
接口类:
注意: 没有接口类或报错,服务消费者需要利用这个接口去调用
package com.itcast.feign;
public interface TestService {
void test01();
}
Impl实现类:
注意: 该service 导入的包为dubbo的包,不是spring的(用Component代替)
package com.itcast.feign.Impl;
import com.itcast.dubboservice.TestService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service
public class TestServiceImpl implements TestService {
@Override
public void test01(){
System.out.println(11111);
}
}
4、服务消费者
4.1、yml配置
dubbo:
application:
name: service-comsumer # 服务应用名字
registry:
address: zookeeper://ip:2181 #注册中心地址(ip为能访问到Zookeeper的ip)
scan:
base-packages: com.itcast.dubboservice # 提供的服务,需要扫描的包
4.2、将服务提供者的接口类复制一份(注意包名保持一致)
package com.itcast.feign;
public interface TestService {
void test01();
}
4.3、注入调用服务(利用@Reference注解)
注意:包名与服务提供的包名一致
package com.itcast.dubboservice;
import org.springframework.stereotype.Component;
import org.apache.dubbo.config.annotation.Reference;
@Component
public class Test02 {
@Reference
TestService testService;
@Override
public void test02(){
testService.test01();
}
}
5、docker下载Dubbo-admin并使用
# 拉取镜像
docker pull chenchuxin/dubbo-admin
# 新建文件夹
mkdir /XXX/dubbo-admin
# 启动容器
docker run -it -d --name dubbo-admin \
-v /XXX/dubbo-admin:/data \ # XXX为新创的文件夹挂载目录
-p 8080:8080 \
-e dubbo.registry.address=zookeeper://ip:2181 \ #此处ip为zookeeper容器ip
chenchuxin/dubbo-admin
服务器ip(或者域名)+端口(8080)即可进入界面
会弹出一个弹窗,输入账号密码即可(账号密码均为root)