Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dubbo 2.7.14 指定zone的功能不起作用 #9673

Closed
elvislou opened this issue Feb 10, 2022 · 8 comments
Closed

dubbo 2.7.14 指定zone的功能不起作用 #9673

elvislou opened this issue Feb 10, 2022 · 8 comments
Labels
type/bug Bugs to being fixed

Comments

@elvislou
Copy link

elvislou commented Feb 10, 2022

使用Dubbo的多注册中心和Zone 功能,想通过zone机制跨机房部署dubbo服务。

假设有机房A和机房B,分别部署了nacos注册中心,我们叫nacosA和nacosB
dubbo_nacos

现在在机房A部署一个dubbo服务,注册到nacosA
在机房B部署同一个dubbo服务,注册到nacosB

现在想要做到的效果是:部署在机房A的消费者,需要优先调用机房A的dubbo服务,只有当机房A没有服务的时候,
再调用机房B的服务

根据网上资料和dubbo源码,我们是通过调用前设置
RpcContext.getContext().setAttachment("registry_zone", "A");
来实现的(provider配置文件声明registry的时候,nacosA指定了zone参数为“A”,nacosB指定了zone参数为“B”)。

另外consumer的配置文件中同时声明了两个注册中心nacosA和nacosB

但结果是,不起作用,有时候会调用机房A的服务,有时候会调用到机房B的服务,

dubbo版本是2.7.14

demo见附件
dubbo_zone_demo.zip

@elvislou elvislou added the type/bug Bugs to being fixed label Feb 10, 2022
@chickenlj
Copy link
Contributor

#9679

能否按照这个issue给的方式看一下执行情况

@acmday
Copy link

acmday commented Apr 14, 2022

image

用你的demo debug复现看了下,导致你这个问题的原因是没有配置cluster="failsafe" 。你需要在配置文件中加上cluster="failsafe" 这个配置,否则会因为isAvailable=false,导致你说的这个问题。修复后的demo链接:【https://github.com/acmday/dubbo_zone_demo
感兴趣可以clone验证下。

@elvislou
Copy link
Author

@acmday
我们后来调试出来,是因为这个bug导致的。
#8838

目前官方应该还没有修复。

@acmday
Copy link

acmday commented Apr 30, 2022

#8838是在provider重启后才会有问题并且已经修复,你这个issue和#8838没关系。如果没在配置文件中配置cluster="failsafe",就走不到同区域调用的逻辑(走不到截图中第85行的逻辑),截图中的debug结果已经能给出答案了。你可以clone 【修复后的dubbo_zone_demo 】验证下。@elvislou

@chickenlj
Copy link
Contributor

Check this issue #7822

@elvislou
Copy link
Author

elvislou commented May 13, 2022

@acmday
cluster="failsafe"参数 ,如何会影响到zone的选择?什么原理?
#8838的问题,我们测试下来,包括跟贴主沟通的结果,在2.7.14里面是没有修复的 。

@acmday
Copy link

acmday commented May 13, 2022

@acmday cluster="failsafe"参数 ,如何会影响到zone的选择?什么原理?


可以看下上面截图中第84行代码。
如果没有配置cluster="failsafe",clusterInvoker.isAvailable结果为false,走不到第85行的代码,从而导致指定zone的功能不起作用。

@Meedly
Copy link

Meedly commented Aug 23, 2023

@acmday cluster="failsafe"参数 ,如何会影响到zone的选择?什么原理?

可以看下上面截图中第84行代码。 如果没有配置cluster="failsafe",clusterInvoker.isAvailable结果为false,走不到第85行的代码,从而导致指定zone的功能不起作用。

failsafe配置在多注册中心中,没有生效,这个有什么办法吗?必须每个接口都要配置一下?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/bug Bugs to being fixed
Projects
None yet
Development

No branches or pull requests

4 participants