Dubbo入门以及总结

一、基本原理:通过main的jar包启动服务端服务器,扫描实现类包,向注册中心发起注册,消费端在请求服务端时先向注册中心发起订阅,订阅成功后,唤醒消费者,底层调用invoke方法向服务端发起请求,并获得响应,而监控中心实时监控消费端和服务端的运行情况,但是与业务之前没有必然联系,出了问题也不影响服务器的运行。

二、zk作为注册中心,使用前需要先搭建zk,消费端和服务端的配置文件中需要配置zk的地址,引入相关jar包即可集成。

三、spring包下的消费端、服务端的两个配置文件至关重要!

四、注解Service、Reference分别是alibaba下的包,理解其含义

五、测试和生成公用一套zk,如何保证消费不冲突?

使用自定义过滤器的方式,继承Filter接口,思路:在invoke方法中采用set注入的方式注入bean,获取当前ip地址,先校验是否是白名单,获取当前所以可用的ip地址,看是否包含本地ip即可判别!

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(); } } }

六、zk如何选取leader

线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2 + 1的Server票数, 设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。

posted @ 2018-09-19 23:12  疯狂的代码哒哒哒  阅读(156)  评论(0)    收藏  举报