![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/096ec6de50c1e1000abf60d7285400c8.png)
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
1. dubbo 环境安装
1.1 Windows下zookeeper安装使用
- 下载zookeeper 链接
- 解压zookeeper
- 运行zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件
- 修改zoo.cfg配置文件
- 将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。
注意几个重要位置:
dataDir=./ 临时数据存储的目录(可写相对路径)
clientPort=2181 zookeeper的端口号
修改完成后再次启动zookeeper - 使用zkCli.cmd测试
ls /:列出zookeeper根下保存的所有节点
create –e /atguigu 123:创建一个atguigu节点,值为123
get /atguigu:获取/atguigu节点的值
1.2 Windos下安装dubbo-admin管理控制台
- 下载dubbo-admin 链接
- 进入目录,修改dubbo-admin
- 配置修改 src\main\resources\application.properties 指定zookeeper地址
- 打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
- 运行dubbo-admin
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
2. springboot的配置
2.1 创建两个modul,分别是provider和consumer,如下(可以先创建Empty项目,再创建两个modul,因为只是简单测试,只需勾选web模块就行)
2.2 provider的配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.12</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</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>
2.3 创建需要提供服务的包
2.3.1 TickService接口代码
package com.muluo.service;
/**
* @author Muluo
* @create 2022-04-06 16:52
*/
public interface TickService {
String printInfo();
}
2.3.2 TickServiceImpl实现类代码
package com.muluo.service;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
/**
* @author Muluo
* @create 2022-04-06 16:52
*/
@DubboService
@Component
public class TickServiceImpl implements TickService {
@Override
public String printInfo() {
return "Hello World";
}
}
2.3.3 启动类加注解
package com.muluo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo(scanBasePackages = {"com.muluo.service"})
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
2.4 配置文件
server.port=9090
dubbo.application.name=provider-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=com.muluo.service
#dubbo.protocol.port=2022
2.5 consumer配置
- 导入依赖(与provider导入的依赖一样)
- 创建相应的包
2.6 配置consumer的配置文件
server.port=9091
#服务的名称
dubbo.application.name=consume-server
#服务注册地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
2.7 创建个测试类
@Component
public class UserService {
@DubboReference//引用provider提供的服务
TickService tickService;
public void info(){
System.out.println(tickService.printInfo());
}
}
3 测试过程
3.1 打开zookeeper
3.2 打开dubbo监控中心
3.3 启动provider
3.4 启动consumer
3.5 测试结果