【dubbo】面试题

1.面试题:Dubbo中zookeeper做注册中心,如果注册中心集群全都挂掉,发布者和订阅者之间还能通信么?

 1、【提供者】在【启动】时,向注册中心zk 【注册】自己提供的服务。

 2、【消费者】在【启动】时,向注册中心zk 【订阅】自己所需的服务。

可以的,消费者在启动时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地(dubbo启动成功后会在本地生成一个cache文件).

每次调用时,按照本地存储的地址进行调用

可以的,消费者本地有一个生产者的列表,他会按照列表继续工作,倒是无法从注册中心去同步最新的服务列表,短期的注册中心挂掉是不要紧的,但一定要尽快修复

挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的

转载来源:https://blog.csdn.net/zh521zh/article/details/77948208

2.测试和生产公用一套zookeeper,怎么保证消费不冲突

  • dubbo白名单(Filter过滤器)
  • 服务分组
<!--服务-->
<dubbo:service group="feedback" interface="com.xxx.IndexService" />
<dubbo:service group="member" interface="com.xxx.IndexService" />

<!--引用-->
<dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
<dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />
  • 多版本
<dubbo:service interface="com.foo.BarService" version="1.0.0" />

第一种方案: 
实现com.alibaba.dubbo.rpc.Filter接口:

public class AuthorityFilter implements Filter {  
    private static final Logger LOGGER = LoggerFactory.getLogger(AuthorityFilter.class);  

    private IpWhiteList ipWhiteList;  

    //dubbo通过setter方式自动注入  
    public void setIpWhiteList(IpWhiteList ipWhiteList) {  
        this.ipWhiteList = ipWhiteList;  
    }  

    @Override  
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {  
        if (!ipWhiteList.isEnabled()) {  
            LOGGER.debug("白名单禁用");  
            return invoker.invoke(invocation);  
        }  

        String clientIp = RpcContext.getContext().getRemoteHost();  
        LOGGER.debug("访问ip为{}", clientIp);  
        List<String> allowedIps = ipWhiteList.getAllowedIps();  
        if (allowedIps.contains(clientIp)) {  
            return invoker.invoke(invocation);  
        } else {  
            return new RpcResult();  
        }  
    }  
}

能通过setter方式来注入其他的bean,且不要标注注解!dubbo自己会对这些bean进行注入,不需要再标注@Resource让Spring注入

在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter,内容如下: xxxFilter=com.xxx.AuthorityFilter 
修改dubbo的provider配置文件,在dubbo:provider中添加配置的filter, 内容如下:

    <dubbo:provider filter="xxxFilter" />  

这样就可以实现dubbo接口的IP白名单功能了。 
出自https://www.cnblogs.com/wangzhongqiu/archive/2017/09/22/7575759.html 

3.服务上线怎么不影响旧版本?

采用多版本开发,不影响旧版本。

4.如何解决服务调用链过长的问题?  

可以结合zipkin实现分布式服务追踪。

出自:https://blog.csdn.net/qq_33314107/article/details/80821122

猜你喜欢

转载自blog.csdn.net/heni6560/article/details/81540934