关于rpc实现远程过程调用、dubbo+zookeeper配合实现
1.随便下载个zookeeper.zip,此框架主要是dubbo的服务注册中心。可以单独将这个框架放在一个服务器,通过ip给服务提供者和服务消费者远程连接2.单独开两个idea,分别按顺序执行服务提供者、服务消费者左边是服务提供者:可以看到在配置文件中含有protocol;右边是服务消费者,只有简单的链接到zookeeper的服务器地址我这里是本地测试,有服务器的可以将lo...
1.随便下载个zookeeper.zip,此框架主要是dubbo的服务注册中心。
可以单独将这个框架放在一个服务器,通过ip给服务提供者和服务消费者远程连接
2.单独开两个idea,分别按顺序执行服务提供者、服务消费者
左边是服务提供者:可以看到在配置文件中含有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来统一管理。
若zookeeper服务器太过于庞大,还可以采用集群的方式分流,至于如何zookeeper集群,这个配置自己百度,很简单,上面的zookeeper注册地址修改下就行了。
更多推荐
所有评论(0)