自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(20)
  • 收藏
  • 关注

原创 RocketMQ源码分析之权限ACL

Broker服务端初始化时会初始化权限相关的类,是否校验权限需要通过aclEnable控制,在指定目录下查找所有的访问校验规则类BrokerController#initializepublic static final String ACL_VALIDATOR_ID = "META-INF/service/org.apache.rocketmq.acl.AccessValida...

2019-06-13 17:06:26 2611

原创 Dubbo源码分析之异步回调

异步回调需要设置方法返回值为CompletableFuture或者他的子类消费端判断返回值,设置参数异步加回调class InvokerInvocationHandler implements InvocationHandlerprivate RpcInvocation createInvocation(Method method, Object[] args) {...

2019-06-13 17:00:23 580

原创 Dubbo源码分析之处理请求(下)

处理请求,判断请求是否已经被损坏void handleRequest(final ExchangeChannel channel, Request req) throws RemotingException { Response res = new Response(req.getId(), req.getVersion()); if (req.isBroken()) { ...

2019-06-13 16:42:42 286

原创 Dubbo源码分析之处理请求(上)

提供端接收请求class NettyServerHandler extends ChannelDuplexHandlerpublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { NettyChannel channel = NettyChannel.getOrAddChanne...

2019-06-13 16:39:13 448

原创 Dubbo源码分析之发送请求

消费端操作InvokerInvocationHandler代理发送请求,组装调用类public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); Class<?>[] paramete...

2019-06-13 16:35:53 311

原创 Dubbo源码分析之编解码

编码器private class InternalEncoder extends MessageToByteEncoder { @Override protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception { org.apache.d...

2019-06-13 16:32:02 468

原创 Dubbo源码分析之建立连接

当消费端监听到有提供者URL存在时,会进行服务引用,建立与提供端之间的链接invoker = new InvokerDelegate<>(protocol.refer(serviceType, url), url, providerUrl);引用过程会经过监听器和过滤器的包装public <T> Invoker<T> refer(Class&lt...

2019-06-13 16:04:43 610

原创 Dubbo源码分析之构建远程Invoker

无提供者消费端初次注册当没有提供者时或者提供者都取消注册时,监听器会通知消费端节点变更,即各个节点下无子节点时会返回一个空集合,然后组装一个空协议的URL返回private List<URL> toUrlsWithEmpty(URL consumer, String path, List<String> providers) { List<U...

2019-06-13 15:59:25 695

原创 Dubbo源码分析之消费端

dubbo的xml配置文件<dubbo:reference>对应的就是ReferenceBean,它实现了FactoryBean,所以在初始化实例时就会调用他的实现方法,从而开启服务引用public Object getObject() { return get();}检查必要的配置信息,加载注册中心URL,拼装引用URL。checkRegistry();...

2019-06-13 15:56:26 443

原创 Dubbo源码分析之提供端(4)

获取zookeeper注册中心private Registry getRegistry(final Invoker<?> originInvoker) { URL registryUrl = getRegistryUrl(originInvoker); return registryFactory.getRegistry(registryUrl);}移除暴...

2019-06-10 14:28:34 960

原创 Dubbo源码分析之提供端(3)

包装交换处理类,增加解码以及处理请求的功能public HeaderExchangeHandler(ExchangeHandler handler) { if (handler == null) { throw new IllegalArgumentException("handler == null"); } this.handler = hand...

2019-06-10 14:24:31 550

原创 Dubbo源码分析之提供端(2)

获取注册URL,还原原来的协议,因为设置的临时协议只是为了导向到该类。private URL getRegistryUrl(Invoker<?> originInvoker) { URL registryUrl = originInvoker.getUrl(); if (REGISTRY_PROTOCOL.equals(registryUrl.getProtoc...

2019-06-10 14:15:57 135

原创 Dubbo源码分析之提供端(1)

Dubbo启动依赖于spring容器的启动,而spring容器的启动主要的方法都在AbstractApplicationContext类的refresh方法中,而我们在xml文件里面配置的标签<dubbo:service>或者设置的注解service对应的类为ServiceBean,它实现了一个ApplicationListener,这个接口的主要是监听spring容器的启动事件,当s...

2019-06-10 14:10:50 95

原创 Dubbo源码分析之扩展机制(3)

获取到自适应类型后进行实例化并且进行属性注入,这里会判断对象工厂是否为空,当类型type为ExtensionFactory时会为空,也就是不会注入属性,它的自适应类型为AdaptiveExtensionFactory,所以其他类型的objectFactory就是AdaptiveExtensionFactoryprivate T injectExtension(T instance) { ...

2019-06-10 13:50:05 187

原创 Dubbo源码分析之扩展机制(2)

当没有设置自适应类型时动态创建自定义类private Class<?> createAdaptiveExtensionClass() { String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate(); ClassLoader classLoader = findC...

2019-06-10 13:46:28 228

原创 Dubbo源码分析之扩展机制(1)

Dubbo源码分析系列基于最新的master分支。特性 基于透明接口的RPC 智能负载均衡 自动服务注册和发现 可扩展性高 运行时流量路由 可视化的服务治理 内容核心类是ExtensionLoader,主要用于实现扩展性,例如类实例之间的自动注入,自动包装,获取满足条件自适应的实例信息。Java的...

2019-06-10 13:36:24 604

原创 Disruptor源码分析之其他功能

单生产者SingleProducerSequencer单生产者类,nextValue代表当前的下标,nextSequence代表这次需要的下标,与多生产者类似,只是不需要循环重试,因为只有一个生产者产生数据,所以只需要一次判断就可以,没什么并发问题。public long next(int n){ if (n < 1 || n > bufferSize) ...

2019-06-03 12:35:27 251

原创 Disruptor源码分析之消费端

启动Disruptor,原子类型判断启动状态,只能启动一次,ConsumerRepository实现了Iterable接口,则遍历的是consumerInfos集合public RingBuffer<T> start(){ checkOnlyStartedOnce(); for (final ConsumerInfo consumerInfo : consume...

2019-06-03 12:32:54 278

原创 Disruptor源码分析之提供端

提供端发布消息public void publishEvent(final EventTranslator<T> eventTranslator){ ringBuffer.publishEvent(eventTranslator);}public void publishEvent(EventTranslator<E> translator){ ...

2019-06-03 12:30:35 155

原创 Disruptor源码分析之初始化

Disruptor的核心是解决伪共享,通过给填充整个缓存行来达到提高缓存命中率以及提高并发。通过一个环状数据结构实现RingBuffer。主要使用的方式如下,一个存储数据的RingBuffer,一个执行消费的线程生成器。public Disruptor(final EventFactory<T> eventFactory, final int ringBufferSize, f...

2019-06-03 12:28:02 389

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除