dubbo学习笔记
Dubbo的启动方式
依赖容器(Tomcat)
使用main方法
使用内置的main方法
Dubbo控制台和监控台配置
配置控制台
查看maven的版本信息
执行源码的编译和打包操作
最后编译结果为如下,表示成功了。
部署dubbo管控台
1、在打包后的application.properties文件中修改对应配置信息
2、部署dubbo控制台
通过localhost:7001 访问控制台 (默认账号和密码相同)
配置监控台
1、找到这个目录下面对应文件
2、解压这个.gz文件,进行相应的配置
3、启动监控台(通过start.bat/start.sh启动)
4、解决操作的过程的数据不能够显示到监控台的问题?
在每一个服务的配置文件中添加一句配置
服务检查
表示启动的时候不做检查依赖,主要用于服务的循环依赖的实例 check设置为false,check默认为true
多协议支持
dubbo (默认) ,长连接协议 【操作过程中数据量比较小的传输】,不适用视频,大文件等传输操作。
hessian 短连接协议(传输数据量比较大情况,在项目开发中会针对不同流量来进行协议的设定)
1、引入依赖
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26</version>
</dependency>
2、在对应配置文件添加协议
<dubbo:protocol name="hessian" port="20999"/>
webservice
rmi
http
thirft
一个服务一个协议
一个服务多个协议
多注册中心
多版本支持
消费端指定不同的版本号
消费端异步调用(只支持Dubbo协议)
### RpcContext.getContext().getFuture(); 获取异步对象
public static void main( String[] args ) throws InterruptedException, ExecutionException {
ApplicationContext
context = new ClassPathXmlApplicationContext("spring/application-consumer.xml");
ApiDemoTest demoTest = (ApiDemoTest) context.getBean("apiDemoTest");
String admin = demoTest.login("admin", "123");
Future<String> future = RpcContext.getContext().getFuture();
System.out.println("main:" + admin);
System.out.println("结果:"+future.get()); // 阻塞等待结果
System.out.println("=========");
}
主机绑定问题(解决注册中心上面注册的是服务器名称问题)
ServiceConfig-> findConfigedHosts的源码
PC: Gerry-PC:8080/ => 192.168.3.22:8080
服务只订阅:
1、在服务端的的配置中
2、在消费端通过在dubbo:references 配置如下:
服务只注册:
场景: 注册中心的服务只对内部服务提供订阅,外部服务订阅不了。
服务端配置:
负载均衡(配置实现)
RandomLoadBalance -> random 随机负载均衡 (默认的)
RoundRobinLoadBalance -> roundrobin 轮询负载均衡
LeastActiveLoadBalance -> leastactive 最小响应时间负载均衡
ConsistentHashLoadBalance -> consistenthash 一致性hash负载均衡
消费端配置负载均衡策略
服务调用超时问题
1、建议开发的服务都设置重试次数和超时时间。
集群容错
Failover cluster 失败的时候将自动切换并重试其他的服务器。通过 retries=2 来设置重试的次数
Failfast cluster 快速失败,只发起一次调用;写操作,比如新增记录,非幂等请求。
Failsafe cluster 失败安全,出现异常信息,直接忽略异常。主要用于日志操作出现异常情况。
Failback cluster 失败自动恢复,后台记录失败请求,定时重发这个信息(消息推送)
Forking cluster 并行调用多个服务,只要一个成功就返回,只应用在读数据的时候。
BroadCast cluster 广播调用所有服务提供者,逐个调用,只要有一个报错就返回异常
消费端做如下的配置即可:
Dubbo源码结构:
代码示例: