Dubbo走读——ExtensionLoader(服务发现)

JAVA提供的服务发现

 

Java1.6开始通过ServiceLoader提供了一种服务发现机制,通过它可以自由选择自己的服务实现。其工作原理是,通过扫描/META-INF/services/下以服务名称(类名称)命名的文件找到对应的服务实现,ServiceLoader返回的是Iterator,如果有多个,则需要由使用方做选择。

 

JDK中有一些实现就用了这种服务发现机制,像SelectorProvider在创建provider的过程中,会通过Ser[......]

Read more

Posted in 日常文章 | Tagged | Leave a comment

dubbo-rpc请求处理流程 client端

获取reference对象

假设我们采用Spring配置,那么我们使用的是ReferenceBean,从ReferenceBean继承自FactoryBean我们知道对于这么一个reference配置:

<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

当引用这个bean时,是通过ReferenceBean[......]

Read more

Posted in 日常文章 | Tagged | Leave a comment

dubbo-负载均衡

1. 一些相关的概念

<1> 服务sticky(服务黏性),类似让客户端的请求总是分发到同一台服务器。

如nginx中可以支持session sticky,通过ip_hash实现客户端的请求总是分发到同一个服务器。 有时候网站或系统经常是与session有关的,需要用sessionid或cookie来识别用户验证用户。

 

2. 实现原理

dubbo官方文档中对负载均衡扩展的说明有:

(1) 扩展说明:

从多个服务提者方中选择一个进行调用。[......]

Read more

Posted in 日常文章 | Tagged | Leave a comment

dubbo源码阅读:rpc请求处理流程(1)

获取reference对象

假设我们采用Spring配置,那么我们使用的是ReferenceBean,从ReferenceBean继承自FactoryBean我们知道对于这么一个reference配置:

 

当引用这个bean时,是通过ReferenceBean的getObject()方法。它的实现很简单,直接调ReferenceConfig的get()方法,其实现如下:

public synchronized T get() {
        if (destro[......]

Read more

Posted in 读书笔记 | Tagged | Leave a comment

每日碎碎念——Spring Bean依赖的dubbo服务创建失败导致系统无法启动?

项目中一些地方需要调用dubbo提供的服务,dubbo提供了对spring的完美支持,客户端只需配置一个reference bean即可使用服务。这个时候面临了一个问题:由于我们的业务bean直接通过注入方式使用dubbo接口,系统启动过程中,spring会pre initialize bean,这个时候由于依赖的bean创建失败,spring会直接关闭bean容器,系统启动失败。

可以看看BeanFactory的refresh函数:

try {[......]

Read more

Posted in 日常文章 | Tagged , | Leave a comment