Dubbo+Zookeeper服务的注册与调用实现步骤.

一. 什么是dubbo?

百度百科:

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

原理图:Dubbo+Zookeeper服务的注册与调用实现步骤._第1张图片
简单来说,dubbo框架能实现远程过程调用,具体流程是provider服务提供者(被调用的一方又称生产者)将服务注册到一个地方,然后Consumer服务的使用者(调用程序的一方又称消费者)在从这个地方拿到服务.那么"这个地方"是哪呢?

二.什么是Zookeeper?

  1. 作用:服务注册与发现,.简单来说它在这儿就是一个注册中心,生产者将服务注册进来,消费者从里面拿出去使用,充当一个桥梁的作用.
  2. ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务.

Zookeeper下载

三.Dubbo+Zookeeper简单实现远程调用

  1. 第一步:idea创建一个空项目,在空项目下使用spring initializr创建两个模块
    生产者模块(provider-server),消费者模块(consumer-server).
    Dubbo+Zookeeper服务的注册与调用实现步骤._第2张图片

  2. 第二步:provider-server配置,将要暴露的接口注册到注册中心

配置文件:

server.port=8081

# 要暴露的服务应用名字
dubbo.application.name=provider-server

# 注册中心地址即zookeeper地址,可以在任意地方启动
dubbo.registry.address=zookeeper://127.0.0.1:2181

# 要被注册的服务,即扫描要被注册服务的包
dubbo.scan.base-packages=com.shao.service

要暴露(注册到注册中心)的接口:

package com.shao.service;
public interface BuyService {
    String getApple();
}

要暴露(注册到注册中心)接口的实现类:

package com.shao.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Service //这个是dubbo中的注解,作用是被它标注的类在项目一启动就被自动注册到注册中心
@Component //为了区分dubbo中的@Service注解,这里尽量不适用Spring中的Service注解
public class BuyServiceImpl implements BuyService {
    @Override
    public String getApple() {
        return "An Apple";
    }
}

注意代码中的注解,不要导错包

  1. 第三步: consumer-server从注册中心拿到服务;
    配置文件:
server.port=8082
# 消费者要提供自己的名字
dubbo.application.name=consumer-server
# 从哪个注册中心拿服务.
dubbo.registry.address=zookeeper://127.0.0.1:2181

调用接口:
注意:真正开发是通过Pom坐标是按引入的,这里在consumer-server下相同路径下创建一个和provider-server相同的接口即可.

package com.shao.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service//这里是注入到Spring中
public class GetAppleService {
//    @Autowired 之前注入本地的是用@Autowired
 @Reference
 private BuyService buyService;
public void buyApple(){
    String apple = buyService.getApple();
    System.out.println("买了一个苹果==>"+apple);
}
}
  1. 第四步:测试类
@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    private GetAppleService getAppleService;
    @Test
    void contextLoads() {
        getAppleService.buyApple();
    }

}

结果:通过dubbo+Zookeeper,成功RPC远程过程调用.

四.总结

注解:

  1. @Service: dubbo中的注解,作用是被它标注的类在项目一启动就被自动注册到注册中心,提供注解时使用.
  2. @Reference: 这个和@Autowired一起记住,只不过是@Autowired是植入项目内的实力,而@Reference是植入RCP接口返回的实例.

配置文件:
生产者和消费者都需要提供名字和注册中心地址,消费者不用扫描包.
Zookeeper:
解压后打开bin目录下有启动脚本,启动即可.



我是一个小白,欢迎指教!

你可能感兴趣的:(微服务)