dubbo
hudongdongjava
这个作者很懒,什么都没留下…
展开
-
19、心跳机制
HeaderExchanger执行DubboProtocol.export会执行createServer方法创建dubbo心跳检测进程 目的:是为了维持提供者和消费者之间的长连接 实现:dubbo的心跳时间heartbeat默认是60s,超时时间默认是60s3,有一个定时任务每60s检测心跳,如果在60s内没有收到心跳响应,发送心跳消息,如果在60s3时间内没有收到心跳响应,如果是服务端,则关闭channel,客户端则重连。设置 可以通过protocolConfig.setHeartbeat(原创 2020-10-10 16:45:54 · 188 阅读 · 0 评论 -
18、日志适配
日志适配 dubbo 内置 log4j、slf4j、jcl、jdk 命令行: java -Ddubbo.application.logger=log4j 在 dubbo.properties 中指定 dubbo.application.logger=log4j 在 dubbo.xml 中配置 <dubbo:application logger=“log4j” />访问日志 如果你想记录每一次请求信息,可开启访问日志,类似于apache的访问日志。注意:此日志量比较大原创 2020-10-10 16:45:23 · 143 阅读 · 0 评论 -
16、过滤器Filter
1、实现com.alibaba.dubbo.rpc.Filterpublic class LogFilter implements Filter{ public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { System.out.println("before invoke..."); Result result = invoker.invoke(invocation);原创 2020-09-30 16:01:09 · 165 阅读 · 0 评论 -
15、令牌验证
令牌验证 通过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者可以全局设置开启令牌验证:<!--随机token令牌,使用UUID生成--><dubbo:provider token="true" />或<!--固定token令牌,相当于密码--><dubbo:provider token="123456" />也可在服务级别设置:原创 2020-09-30 15:58:51 · 489 阅读 · 0 评论 -
14、并发控制和连接控制
并发控制 样例 1 限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:<dubbo:service interface="com.foo.BarService" executes="10" /> 样例 2 限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:<dubbo:service interface="com.fo原创 2020-09-30 15:54:54 · 571 阅读 · 0 评论 -
13、事件通知
dubbo提供了oninvoke、onreturn、onthrow3个事件 oninvoke:调用之前执行,如果被调用的服务有参数,那么oninvoke也必要有和被调用服务一样的参数 onreturn:调用之后执行,至少有一个入参,第一个入参是返回值,其余是调用服务的参数 onthrow:抛出异常后执行,至少一个参数,类型为被抛出服务异常的父类或其本身,其余是调用服务的参数代码示例:消费端:1、定义通知接口和实现类public interface Notify { void onret原创 2020-09-30 15:50:30 · 172 阅读 · 0 评论 -
12、参数回调
摘要:当调用远程服务的时候,远程服务也可以调用消费者。1、编写对应的接口public interface IHelloWorld { int save(CallbackService callbackService);}public interface CallbackService { void callback();}2、实现类public class HelloWorldImpl implements IHelloWorld { public int save(CallbackS原创 2020-09-30 15:48:33 · 192 阅读 · 0 评论 -
11、异步调用
异步调用只能在消费端配置异步调用 基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。1、配置xml,只需要在reference里面新增async=true即可。<dubbo:reference interface="com.hdd.api.IHelloWorld" id="helloWorld" cache="lru" timeout="5000" async="true"></dubbo:reference>2原创 2020-09-30 15:35:19 · 145 阅读 · 0 评论 -
10、结果缓存
缓存只作用于消费端。缓存类型 lru(least recently used): 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。 threadlocal: 当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。 jcache 与 JSR107 集成,可以桥接各种缓存实现。示例:<dubbo:reference interface="com.hdd.api.IHelloWorld" id="hello原创 2020-09-30 15:30:56 · 69 阅读 · 0 评论 -
9、服务分组
当一个服务有多种实现类的时候,可以用group来区分服务:<dubbo:service group="feedback" interface="com.xxx.IndexService" /><dubbo:service group="member" interface="com.xxx.IndexService" />消费:<dubbo:reference id="feedbackIndexService" group="feedback" interface="原创 2020-09-30 15:28:33 · 203 阅读 · 0 评论 -
8、多注册中心配置
多注册中心注册: <dubbo:registry id="chinaRegistry" address="10.20.141.150:9090" /> <dubbo:registry id="intlRegistry" address="10.20.154.177:9010" default="false" /> <!-- 向中文站注册中心注册 --> <dubbo:service interface="com.alibaba.hello原创 2020-09-30 15:26:51 · 202 阅读 · 0 评论 -
7、多协议配置以及dubbo协议详解
提供者指定协议: <dubbo:protocol name="dubbo" port="20880" /> <dubbo:protocol name="rmi" port="1099" /> <!-- 使用dubbo协议暴露服务 --> <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protoc原创 2020-09-30 15:09:18 · 680 阅读 · 0 评论 -
6、直连提供者
可以绕过注册中心而直接连接指定的服务。配置方式:XML:<dubbo:registry address="zookeeper://127.0.0.1:2181" check="true" subscribe="false"></dubbo:registry><dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />原创 2020-09-28 17:09:33 · 71 阅读 · 0 评论 -
5、线程模型
线程模型 如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。因此,需要通过不同的派发策略和不同的线程池配置的组合来应对不同的场景:&原创 2020-09-28 17:06:26 · 141 阅读 · 0 评论 -
4、负载均衡策略
dubbo的负载均衡有4种,默认的是random loadBalance。random loadbalance:按权重随机调用。如果所有的权重都一样,则随机调用。否则按照权重之和取随机数。 根据权重之和生成一个随机数,然后和具体的服务实例的权重相减做偏移量,然后取权重小于0的。 比如随机数为10,某一个服务实例的权重是12,10-12<0,那么该服务实例被调用。roundrobin LoadBalance轮询,按公约后的比例来设置轮询比例。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,原创 2020-09-28 10:45:48 · 61 阅读 · 0 评论 -
3、集群容错
节点说明: Invoker:封装了provider地址和service接口信息 Directory:相当于是Invoker的集合,它的值是可变化的,比如注册中心推送的变更数据。 Cluster:将Directory里的多个Invoker伪装成一个Invoker,伪装过程包含了容错逻辑,默认是Failover,调用失败立即调用另一个。 Router:从多个Invoker中按照路由规则选出子集,比如读写分离,应用隔离等。 LoadBalance:从多个Invoker中选出具体的一个用于本次.原创 2020-09-26 17:58:56 · 214 阅读 · 0 评论 -
2、dubbo简单配置
示例:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://w原创 2020-09-26 17:27:30 · 87 阅读 · 0 评论 -
1、dubbo简介
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC(remote procedure call)远程服务调用方案,以及作为SOA(service oriented architectrue)服务治理方案架构 角色简介: Container:服务运行容器 Provider:暴露服务的服务提供方 Consumer:调用远程服务的服务消费方 Registry:服务注册和发现的注册中心。 Monitor:统计服务调用次数和调用时间的监控中心 调用原创 2020-09-26 16:50:57 · 74 阅读 · 0 评论