dubbo启动顺序问题

  之前使用dubbo2.5.4的时候一直有个问题:服务启动的时候,如果是先启动consumer后启动provider,则通过@Referrence获取的service会报空指针异常。而先启动provider后启动consumer服务可以正常访问,网上说设置check属性为false,但试过了无效。

网上很多人说可以,但自己的项目就是不行,跟了一下dubbo的源码。

先启动consumer,后启动provider,在启动provider的时候,通过consumer的日志看到zookeeper确实向consumer发送注册信息了,

但是在ReferenceConfig类中发现一个不太对劲的参数:

图中的check属性就是在@Referrence中设置的check参数,自己明明设了false,到了这里却变成了null,还设成了true。

这情况说明了自己设的check属性是没用的。

最后google发现这是dubbo2.5.4的一个bug,在2.5.6版本修复了,将dubbo的版本换成2.5.6后,再跟一次源码

这样能取到check的值了,服务也能正常获取。

另:在更换dubbo版本的时候还出了一个小问题:如果provider的配置@Service上使用了protocol = “dubbo” 参数,启动时会报 No bean named 'dubbo' available 的错。

把 protocol = “dubbo” 去掉就好了,网上说2.5.6版本的dubbo支持多协议,但为什么不能指定协议了,这个问题有待探讨。

转载于:https://www.cnblogs.com/jagerLan/p/10475671.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dubbo + Zookeeper 的项目启动顺序大致可以分为以下几个步骤: 1. **Zookeeper 启动**:首先,需要启动Zookeeper服务。这是集群管理的基础,用于协调分布式系统中各个节点的状态和服务发现。 2. **注册中心(Zookeeper作为注册中心)配置**:接下来,在Dubbo项目的配置文件中设置Zookeeper作为注册中心的信息,包括Zookeeper的地址、端口等信息。这一步决定了Dubbo应用如何通过Zookeeper与服务提供者和消费者交互。 3. **服务提供者启动**:服务提供者启动时,会向注册中心(即Zookeeper)注册其提供的服务。这里的注册过程包含了两个关键步骤: - **检查点**:在启动服务之前,通常会先检查某个状态点(如某个目录路径),以确保所有必要的组件已经就绪并正常运行。 - **注册服务**:服务提供者将自身的服务信息(例如服务名、版本、实现类等)注册到Zookeeper上,形成服务目录树结构,方便后续服务查找。 4. **服务消费者启动**:服务消费者在启动时,会从注册中心查询可用的服务列表。这个过程中可能会涉及到缓存机制,减少对注册中心的频繁访问压力。当消费者发现目标服务后,会建立连接并准备调用服务。 5. **服务调用**:在完成以上步骤之后,消费者就可以通过创建的连接调用提供者的服务了。Dubbo会负责处理服务调用的过程,包括序列化数据、网络传输、远程调用、异常处理等。 6. **关闭资源**:最后,在程序结束前,应确保所有资源得到正确的释放,避免内存泄漏或其他潜在的问题。 在这个过程中,Zookeeper 作为核心的协调服务,保证了服务提供者和服务消费者的稳定通信,并实现了动态服务发现的功能。Dubbo框架则提供了高效、易用的RPC(Remote Procedure Call)机制,使得服务间的调用更为便捷和可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值