关于rpc实现远程过程调用、dubbo+zookeeper配合实现

1.随便下载个zookeeper.zip,此框架主要是dubbo的服务注册中心。

可以单独将这个框架放在一个服务器,通过ip给服务提供者和服务消费者远程连接

2.单独开两个idea,分别按顺序执行服务提供者、服务消费者

关于rpc实现远程过程调用、dubbo+zookeeper配合实现

左边是服务提供者:可以看到在配置文件中含有protocol;

右边是服务消费者,只有简单的链接到zookeeper的服务器地址

我这里是本地测试,有服务器的可以将localhost改为服务器地址。

我理解的是服务器提供者将自己暴露的api接口注册到远程的zookeeper注册中心去,这个zookeeper注册中心可以在本地,也可以在其他服务器上,然后服务器消费者就可以通过zookeeper的注册中心地址去远程调用api的接口。

3.以下是服务器提供者的主要代码

dubbo-api:只有一个简单的接口,这个接口就是要注册到zookeeper中心。供远程消费者调用。可以在这个接口继续添加其他方法,也可以另外建个新接口,反正在服务器消费者在注入这个接口时,我们会用到

@com.alibaba.dubbo.config.annotation.Reference(check = false)这个注解,这个注解的意思就是给dubbo远程调用用的,@autowired这种注解只用于本地注入,不可以远程注入。注意:::check=false不能等于true,否则调用方法时会报空指针。
public interface DemoService {
  String sayHelloToSomeOne(String name);
}

dubbo-provider:这里的service并不是spring的注解,而是dubbo的服务化注解,这个类就是具体的服务实现。

import com.alibaba.dubbo.config.annotation.Service;
import com.example.demo.DemoService;

/**
 * Created by Mac on 2019/5/20.
 */
@Service
public class DemoServiceImpl implements DemoService {
  @Override
  public String sayHelloToSomeOne(String name) {
    return "这是一个哈哈"+name;
  }
}

4.以下是服务器消费者的代码:

dubbo-api:和服务器提供者的api接口一模一样,只是为了方便远程调用里面的接口方法。

dubbo-consumer:可以看到这里使用了@Reference注解,该注解就是为了远程调用并注入。

此时代码和配置都完成了

import com.example.demo.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by Mac on 2019/5/20.
 */
@RestController
public class DemoConsumerController {
  @com.alibaba.dubbo.config.annotation.Reference(check = false)
  private DemoService demoService;

  @RequestMapping("/hello")
  public String sayHello(@RequestParam("name")String name){
    return demoService.sayHelloToSomeOne(name);
  } 
}

5.需要先启动provider端,然后在启动消费者端。然后网页打开,没报错就行了。

具体的配置在顶部,至于zookeeper的配置自己百度,很大众的配置。

 

对于这个远程服务的调用,很符合下面这个图的理解:至此结构就变成了由图一进化到了图二。所有的服务都交于zookeeper来统一管理。

关于rpc实现远程过程调用、dubbo+zookeeper配合实现

关于rpc实现远程过程调用、dubbo+zookeeper配合实现

若zookeeper服务器太过于庞大,还可以采用集群的方式分流,至于如何zookeeper集群,这个配置自己百度,很简单,上面的zookeeper注册地址修改下就行了。