很多公司都用Dubbo作为自己的RPC远程服务调用框架,其优异的性能也是得到了大家的认可。目前的标配是用ZooKeeper进行服务注册,用Dubbo自带的Dubbo Admin进行服务管理,基本来说是够用的。
在讲今天的内容之前,还是看看Dubbo+ZooKeeper是怎么玩的。
Dubbo+ZooKeeper配置流程
1.POM依赖
com.alibaba.spring.boot
dubbo-spring-boot-starter
2.0.0
com.101tec
zkclient
0.10
2.暴露服务接口
接口:
public interface StuRpcService {
int add(int a, int b);
}
实现类:(这里的@service注解是dubbo的,不要用spring的)
@Service
@Component
public class StuRpcServiceImpl implements StuRpcService {
private final static Logger logger = LoggerFactory.getLogger(StuRpcServiceImpl.class);
@Override
public int add(int a, int b) {
logger.info("StuRpcServiceImpl#add》》》》》》》");
System.out.println("StuRpcServiceImpl#add》》》》》》》");
return a+b;
}
}
3. 消费服务
@RequestMapping("rpc")
@RestController
public class RpcConsumerController {
@Reference
private StuRpcService stuRpcService;
@RequestMapping("invoke")
public String invokeRpcService(){
return String.valueOf(stuRpcService.add(1, 2));
}
}
4. dubbo注册配置
dubbo.application.name=microservice
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
5. 起zookeeper,起自己的应用,就可以玩起来了。
上面讲解了一遍原有的zookeeper是怎么玩的,现在如果要用nacos来做服务注册和发现,改动大吗?答案是,改动很小,只需要改application.properties和pom依赖即可。
Dubbo+Nacos配置流程要做的改动
1. pom依赖
com.alibaba
dubbo-registry-nacos
0.0.2
com.alibaba.nacos
nacos-client
0.6.1
2. application.properties
nacos.discovery.server-addr=127.0.0.1:8848
nacos.config.server-addr=127.0.0.1:8848
dubbo.registry.address = nacos://127.0.0.1:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
3. 启动nacos,看看服务提供者和消费者是不是都注册上来了
4. 调用一把服务
我是用idea通过8090端口起的服务,这里把服务提供的@Service给注释掉了,然后用dos命令窗口通过8091端口起了一遍应用,这里是没有注释掉@Service的包。造成的结果是:8090端口的应用没有提供服务,8091端口的应用提供了add服务。
http://localhost:8090/rpc/invoke
调用后的结果:
网页上显示3,idea控制台没有打印任何日志,dos命令窗口打印了日志
总结
使用Nacos替换掉Zookeeper,对整个项目的改动并不大。至于为什么用Nacos,不用Zookeeper,有下面的原因
1)分布式系统有CAP理论,Nacos实现了AP,Zookeeper实现了CP,为了系统的HA,宁愿选用AP
2)Zookeeper仅仅是一个简单的服务注册工具,Nacos不仅仅支持服务注册发现,而且实现了配置中心
3)Nacos作为SpringCloud全家桶一员,未来的发展肯定是和微服务路线图发展一致