Dubbo基础学习
分布式架构
1、分布式基础:
分布式系统是若干独立 计算机的集合,这些计算机对于用户来说就像单个相关系统。
老式系统(单一应用架构)就是把一个系统,统一放到一个服务器当中然后每一个服务器上放一个系统,如果说要更新代码的话,每一个服务器上的系统都要重新去部署十分的麻烦。
而分布式系统就是将一个完整的系统拆分成多个不同的服务,然后在将每一个服务单独的放到一个服务器当中。
通俗来说就是一个不行多来几个一起运行
2、应用架构的发展演变
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KLGw4jG-1603820734612)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image001.png)]
a.单一架构(ORM)
一个项目装到一个服务器中,也可以运行多个服务器每个服务器中都装载一个项目。
缺点:维护成本高(对程序添加功能或者其他功能时,需要将一整个项目重新打包,部署),影响开发和程序性能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SDhy7ZMv-1603820734614)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image002.png)]
b.垂直架构(MVC)
将应用抽取成若干个模块部署到不同的服务器上运行,如果那个模块访问量大可以对该模块加服务器运行。
缺点:当模块过多之后之间避免不了交互,影响程序性能。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAoLB1Na-1603820734615)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image003.png)]
c.分布式架构(RPC:远程过程调用)
当垂直应用过多之后,应用之间避免不了交互,所以将核心业务再次进行抽取 作为独立的服务 逐渐形成稳定的服务中心。
是前端快速的响应多变的市场需求
缺点:有可能会造成资源浪费,资源分配不均(当A服务器的访问量少但仍然有着100台服务器运行,但B服务器的服务器访问量非常大
但可能只会有10,50台服务器运行)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58B9NFAi-1603820734617)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image004.png)]
d.流动计算架构(SOA)
在分布式的基础上增加了一个监督调用,治理中心基础访问压力实施管理服务集群,提高集群效率 ,会动态的分布服务器的调度使用。用 于提高机器利用率,资源调度 和治理中心(SOA)是关键,不浪费计算机资源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXkDqWf4-1603820734619)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image004.png)]
3、RPC
RPC【Remote Procedure Call】远程过程调用,是一种进程间通信方式。
是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数
而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i7WL5tSz-1603820734620)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image005.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkGMXvt5-1603820734622)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image006.png)]
RPC****两个核心模块:通讯,序列化
Dubbo
Dubbo是用于分布式系统的框架。
1、Dubbo简介
Apache Dubbo是一款高性能、轻量级的开源Java RPC框架
它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
Dubbo设计架构图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNpO8to8-1603820734623)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image007.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZOvmvu8W-1603820734624)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image008.png)]
1、容器启动init生产者将自己的服务注册到服务中心,这样注册中心就知道我们有哪些服务上线
如果有哪些服务器异常 不能提供服务,注册中心便会将它删除
2、消费者启动优先去访问注册中心访问自己需要的服务,注册中心回馈给他可以提供的服务。
如果有哪些服务下线,注册中心同样会将信息提供给消费者
3、消费者选择自己需要的服务去访问生产者,负载均衡算法会将该请求分布一个请求量少的服务器上进行处理
4、所有的调用信息都会每个一分钟发送给监控中心
- 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
- 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
- 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
- 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
- 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
- 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
- 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
- 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性
2、使用直连方式构建Dubbo工程
1、创建一个MaevnWeb工程模拟服务生产者
2、创建好目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ysNhS70o-1603820734625)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image009.png)]
3、添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<!--Dubbo的依赖 直连方式-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
4、创建domain包以及实体类
dubbo模块之间信息传输是使用序列化的方法进行传输,所以需要实现序列化接口Serializable
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
//setXxx() + getXxx() 笔记中就不记录了
}
5、创建service包以及实现类
public interface UserService {
User queryUserById(Integer id);
}
public class UserServiceImpl implements UserService {
@Override
public User queryUserById(Integer id) {
//模拟调用dao层 查询数据
User user = new User();
user.setId(id);
user.setName("lisi");
user.setAge(18);
return user;
}
}
6、创建核心配置文件
Dubbo-userservice-provider.xml
<!--dubbo的核心配置文件-->
<!--服务的提供者声明名称:必须保证服务名称的唯一性,它的名称是dubbo内部使用的唯一标识-->
<dubbo:application name="ch01-link-userservice-provider" />
<!--访问服务协议的名称及端口号,dubbo推荐使用的是dubbo的协议,端口号默认为20880-->
<!-- naem:指定协议的名称 prot:指定协议的端口号默认为20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!--暴露服务的接口
dubbo:service interface:全限定名称
ref:接口引用的实现类,在spring容器中的表示
registry:N/A表示不使用注册中心
-->
<dubbo:service interface="com.moonlight.dubbo.service.UserService" ref="userservice" registry="N/A"/>
<!--将接口的实现类加载到Spring容器中-->
<bean id="userservice" class="com.moonlight.dubbo.service.impl.UserServiceImpl" />
7、web.xml添加监听器,读取 Dubbo-userservice-provider.xml 配置文件
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
七步完成,服务提供者完整构建 创建服务消费者
a、创建MavenWeb工程 模拟服务消费者
b、构建项目目录
c、添加依赖(注意)
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--springWeb依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!--我们依赖于服务提供者,来调用我们需要的模块 所以需要将ch01-link-userservice-provide 服务生产者项目打成jar包放到我们的本地仓库中,因为ch01-link-userservice-provide 项目是web项目 默认的是war包,所以在pom文件中 注释掉 <packaging>war</packaging> 打成jar之后,改回war -->
<dependency>
<groupId>com.moonlight</groupId>
<artifactId>ch01-link-userservice-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
5、创建dubbo核心配置文件以及springmvc核心配置文件
Dubbo-comsumer.xml
<!--声明服务消费者的名称,保证唯一性-->
<dubbo:application name="002-link-consumer" />
<!--引用远程服务接口
id:远程服务接口对象的名称
interface:调用远程接口 的全限定类名
url:访问服务接口的地址
registry:直连 -->
<dubbo:reference id="userservice" interface="com.moonlight.dubbo.service.UserService" url="dubbo://127.0.0.1:20880" registry="N/A" />
Application.xml
<!--注意导入包时,不要导入错误-->
<!--组件扫描器-->
<context:component-scan base-package="com.moonlight.dubbo.controller"/>
<!--配置注解驱动-->
<mvc:annotation-driven />
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--前缀-->
<property name="prefix" value="/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
n>
6、创建controller控制类
@Controller
public class UserController {
//服务生产者中的接口
@Autowired
private UserService userService;
@RequestMapping(value = "/user")
public String userDetail(Model model,Integer id){
User user = userService.queryUserById(id);
model.addAttribute("user",user);
return "userDetail";
}
}
7、声明中央调度器
读取dubbo-consumer.xml 和 application.xml 配置文件
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml,classpath:dubbo-link-consumer.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern> </servlet-mapping>
8、创建userDetail.jsp 显示页面
运行:创建两个本地tomcat服务器,分别部署“服务生产者”工程以及“服务消费者”工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6r2fRxaz-1603820734626)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image010.png)]
注意:服务器端口号一定要更改,不然服务消费者无法启动成功
服务生产者端口:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dEgJUrpk-1603820734627)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image011.png)]
服务消费者端口:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3x2Xh5JP-1603820734628)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image012.png)]
启动完成之后访问:localhost:8080/user?id=1001;
3、dubbo服务化最佳实践(直连)
虽然上个例子也行运行项目但是消费者时和生产者之间是之间产生交互的,如果如什么服务下线消费者并不会知道仍然可以访问到被下线的项目
所以dubbo便推荐按使用:
3.1 分包
建议将服务接口,服务模型等均放在公共中
3.2 粒度
a、服务接口尽量大粒度,每个方法都代表一个功能 而不是某功能的步骤
b、服务接口建议以业务场景为单位划分,并对相近业务做抽象 防止接口数量爆炸
c、不建议使用过于抽象的通用接口,会给后期维护带来不便
3.3 版本
每个接口都应该定义版本号,区分同一接口的不同实现
如:<dubbo:service interface=“com.xxx.XxxService” version=“1.0”>
总:利用接口工程,服务生产者引用接口工程,来实现接口工程中的接口。
服务消费者也引用接口工程,调用接口工程中的接口,来引用生产者中的实现类 实现业务的调用
1、首先创建一个MavenJava工程
存放实体Bean(实现序列化接口Serializable),以及业务接口
一个User实体类,一个UserService接口即可
2、创建MavenWeb工程 模拟服务生产者
a、添加依赖
spring-context 依赖 spring-webmvc 依赖 dubbo 依赖 com.moonlight.dubbo 003-link–intereface 1.0-SNAPSHOT
b、构建项目目录 实现接口工程中的接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwFSkUHD-1603820734629)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image013.png)]
c、添加核心配置文件
Dubbo-userservice-provider.xml
<!--声明dubbo服务者的名称,保证唯一性-->
<dubbo:application name="004-link-provider"/>
<!-- 设置dubbo使用的协议和端口号-->
<dubbo:protocol name="dubbo" port="20880" />
<!--暴露服务接口-->
<dubbo:service interface="com.moonlight.dubbo.service.UserService" ref="userService" registry="N/A"/>
<!--加载业务接口的实现类到spring容器中-->
<bean id="userService" class="com.moonlight.dubbo.service.impl.UserServiceImpl"/>
d、web.xml文件添加监听器,读取dubbo-userservice-provider.xml配置文件
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3、构建MacenWeb工程,模拟服务消费者
a、添加依赖,和服务生产者中的依赖一样
spring-context 依赖
spring-webmvc 依赖
dubbo 依赖
<!--引用接口工程-->
<dependency>
<groupId>com.moonlight.dubbo</groupId>
<artifactId>003-link--intereface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
b、创建项目目录结构以及controller类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usgKV70J-1603820734630)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image014.png)]
UserService就是接口工程中的接口,通过@Autowired自动注入实现类,便可以调用对应的服务,出现下划线是因为没有找到对应的bean
程序运行就没事了。
c、创建dubbo-consumer.xml 以及 application.xml
dubbo-consumer.xml
<!--声明服务消费者名称,保证唯一性-->
<dubbo:application name="005-link-consumer"/>
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.moonlight.dubbo.service.UserService" url="dubbo://localhost:20880" registry="N/A"/>
Application.xml
<!--声明组件扫描器-->
<context:component-scan base-package="com.moonlight.dubbo.controller"/>
<!--注解驱动-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
d、在web.xml文件中声明中央调度器,读取配置文件
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml,classpath:dubbo-consumer.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
c、创建显示的jsp页面
这样整体项目便构建完毕,这样的好处是消费者不在直接交互生产者,生产者不必再打包被消费者依赖 两者通过接口工程进行业务操作
3、注册中心-zookeeper
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户
通过将服务统一的管理起来 可以有效地优化内部应用对服务发布和使用的流程管理
3.1、下载zookeeper
官网:https://zookeeper.apache.org/releases.html
使用:下载好解压即可,注意找到conf/zoo_sample.cfg 的这个文件
这个zookeeper提供给我们的模板文件,我们需要将这个文件名改为coo.cfg 才能够启动成功zookeeper
启动:找到bin/zkServer.cmd 命令双击即可,也可以进入当前dos窗口下输入zkServer.cmd 回车启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EpB4Q8nZ-1603820734631)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image015.png)]
3.2、创建项目
3.2.1、创建接口工程,存放视图bean(实现序列化接口Serializable),业务接口
3.2.2、创建MavenWeb工程 模拟服务生产者
a、添加依赖
<!--springweb依赖-->
<!--spring依赖-->
<!--dubbo依赖-->
<!--引入接口工程依赖-->
<dependency>
<groupId>com.bjpowerncode.dubbo</groupId>
<artifactId>006-zk-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
b、构建项目目录 实现接口工程中的接口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u6qVsoUN-1603820734632)(file:///C:/Users/ASUS/AppData/Local/Temp/msohtmlclip1/02/clip_image016.png)]
c、创建核心配置文件dubbo-zk-userservice-provider.xml
<!--声明dubbo服务的名称,保证唯一性-->
<dubbo:application name="007-zk-userservice-provider"/>
<!--声明dubbo使用的协议 和 端口号 (不管项目是不是直连都需要声明指定协议和端口号)-->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 使用zooleeper注册中心 需要指定zookeeper注册中心的地址和端口号 -->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--暴露服务接口-->
<dubbo:service interface="com.bjpowerncode.dubbo.service.UserService" ref="userService" />
<!--加载service实现类-->
<bean id="userService" class="com.bjpowerncode.dubbo.service.impl.UserServiceImpl"/>
d、web.xml文件中注册监听器
<!--注册监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-zk-userservice-provider.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.2.3、创建MavenWeb工程 模拟服务消费者
a、添加依赖
<!--springweb依赖-->
<!--spring依赖-->
<!--dubbo依赖-->
<!--引入接口工程依赖-->
<dependency>
<groupId>com.bjpowerncode.dubbo</groupId>
<artifactId>006-zk-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
b、创建项目目录结构以及controller类
c、创建dubbo-zk-consumer.xml 以及 application.xml
dubbo-consumer.xml
<!--声明dubbo服务消费者名称:唯一性-->
<dubbo:application name="008-zk-consumer" />
<!--指定注册中心-->
<dubbo:registry address="zookeeper://localhost:2181" />
<!--引用远程接口服务-->
<dubbo:reference id="userService"
interface="com.bjpowerncode.dubbo.service.UserService" />
Application.xml
<!--声明组件扫描器-->
<context:component-scan base-package="com.moonlight.dubbo.controller"/>
<!--注解驱动-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
d、在web.xml文件中声明中央调度器,读取配置文件
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml,classpath:dubbo-consumer.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
e、创建显示的jsp页面
配置tomcat启动即可,注意端口一定不能写错,不然要不然就是服务无法启动,要不然就是无法访问请求。
3.2.4、版本号的控制
当我们的服务很多的时候,一个接口不会只有一个实现类,必须随着业务的发展而迭代,那么我们就需要控制指定使用的接口版本
将3中创建的生产者和消费者在文件夹中复制一份,将名字以及iml文件删除,再将pom文件中GAV坐标改为重命名的id
用法:
1、在服务生产者中创建两个接口实现类
2、在服务生产者的配置文件中添加服务版本号
<!--暴露服务接口-->
<!--不管是否一个接口有多个实现类,只要服务提供者服务接口的时候指定了版本号,
那么作为消费者引用远程接口服务的时候就必须指定版本号-->
<dubbo:service interface="com.bjpowerncode.dubbo.service.UserService" ref="userServiceImpl" version="1.0.0" />
<dubbo:service interface="com.bjpowerncode.dubbo.service.UserService" ref="userServiceImpl2" version="2.0.0" />
<bean id="userServiceImpl" class="com.bjpowerncode.dubbo.service.impl.UserServiceImpl"/>
<bean id="userServiceImpl2" class="com.bjpowerncode.dubbo.service.impl.UserServiceImpl2"/>
3、在服务消费者的dubbo配置文件中指定使用的版本号
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.bjpowerncode.dubbo.service.UserService" version="1.0.0" />
<dubbo:reference id="userService2" interface="com.bjpowerncode.dubbo.service.UserService" version="2.0.0" />
4、在controller类中注入使用即可
5、监控中心
Dubbo的使用,只要有消费者,生产者,注册中心就可以使用了,但是并不能看到有哪些消费者生产者等等的信息,为了更好的调式
发现问题,解决问题,因此引用 dubbo-admin(监控中心)通过监控中心来对消费者,生产者进行管理。
下载路径:https://github.com/apache/dubbo-admin.git
这里下载的源码,需要进行手工编译 然后打包(路径随你,我的是和zookeeper同级目录下)
使用方法:
1、启动zookeeper注册中心
2、打开doc窗口,切换到jar的当前目录 然后java -jar jar包全名称.jar
3、打开浏览器 输入http://localhost:7001 然后输入账户密码 这个一般都是root+root
4、然后启动你的项目,就可以在这里监控到你的请求信息 以及消费者和生产者的信息
mpl" class=“com.bjpowerncode.dubbo.service.impl.UserServiceImpl”/>
3、在服务消费者的dubbo配置文件中指定使用的版本号
```xml
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.bjpowerncode.dubbo.service.UserService" version="1.0.0" />
<dubbo:reference id="userService2" interface="com.bjpowerncode.dubbo.service.UserService" version="2.0.0" />
4、在controller类中注入使用即可
5、监控中心
Dubbo的使用,只要有消费者,生产者,注册中心就可以使用了,但是并不能看到有哪些消费者生产者等等的信息,为了更好的调式
发现问题,解决问题,因此引用 dubbo-admin(监控中心)通过监控中心来对消费者,生产者进行管理。
下载路径:https://github.com/apache/dubbo-admin.git
这里下载的源码,需要进行手工编译 然后打包(路径随你,我的是和zookeeper同级目录下)
使用方法:
1、启动zookeeper注册中心
2、打开doc窗口,切换到jar的当前目录 然后java -jar jar包全名称.jar
3、打开浏览器 输入http://localhost:7001 然后输入账户密码 这个一般都是root+root
[外链图片转存中…(img-9310yQLm-1603820734634)]
4、然后启动你的项目,就可以在这里监控到你的请求信息 以及消费者和生产者的信息