Dubbo实现RPC调用使用入门
2016-08-05 14:31
513 查看
摘要: 使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。
使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。
另外,如果我们使用Dubbo的服务注册中心组件,这样服务提供方将服务发布到注册的中心,只是将服务的名称暴露给外部,而服务消费方只需要知道注册中心和服务提供方提供的服务名称,就能够透明地调用服务,后面我们会看到具体提供服务和消费服务的配置内容,使得双方之间交互的透明化。
示例场景
我们给出一个示例的应用场景:
服务方提供一个搜索服务,对服务方来说,它基于SolrCloud构建了搜索服务,包含两个集群,ZooKeeper集群和Solr集群,然后在前端通过Nginx来进行反向代理,达到负载均衡的目的。
服务消费方就是调用服务进行查询,给出查询条件(满足Solr的REST-like接口)。
应用设计
基于上面的示例场景,我们打算使用ZooKeeper集群作为服务注册中心。注册中心会暴露给服务提供方和服务消费方,所以注册服务的时候,服务先提供方只需要提供Nginx的地址给注册中心,但是注册中心并不会把这个地址暴露给服务消费方,如图所示:
我们先定义一下,通信双方需要使用的接口,如下所示:
基于上图中的设计,下面我们分别详细说明Provider和Consumer的设计及实现。
Provider服务设计
Provider所发布的服务组件,包含了一个SolrCloud集群,在SolrCloud集群前端又加了一个反向代理层,使用Nginx来均衡负载。Provider的搜索服务系统,设计如下图所示:
上图中,实际Nginx中将请求直接转发内部的Web Servers上,在这个过程中,使用ZooKeeper来进行协调:从多个分片(Shard)服务器上并行搜索,最后合并结果。我们看一下Nginx配置的内容片段:
运行说明
首先保证服务注册中心的ZooKeeper集群正常运行,然后启动SolrSearchServer,启动的时候直接将服务注册到ZooKeeper集群存储中,可以通过ZooKeeper的客户端脚本来查看注册的服务数据。一切正常以后,可以启动运行客户端SearchConsumer,调用SolrSearchServer所实现的远程搜索服务。
核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
1. 项目核心代码结构截图
项目模块依赖
特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化
2.项目依赖介绍
2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:
2.2 Dubbo独立服务项目依赖如下图:
3. 项目功能部分截图:
zookeeper、dubbo服务启动
dubbo管控台
REST服务平台
使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。
另外,如果我们使用Dubbo的服务注册中心组件,这样服务提供方将服务发布到注册的中心,只是将服务的名称暴露给外部,而服务消费方只需要知道注册中心和服务提供方提供的服务名称,就能够透明地调用服务,后面我们会看到具体提供服务和消费服务的配置内容,使得双方之间交互的透明化。
示例场景
我们给出一个示例的应用场景:
服务方提供一个搜索服务,对服务方来说,它基于SolrCloud构建了搜索服务,包含两个集群,ZooKeeper集群和Solr集群,然后在前端通过Nginx来进行反向代理,达到负载均衡的目的。
服务消费方就是调用服务进行查询,给出查询条件(满足Solr的REST-like接口)。
应用设计
基于上面的示例场景,我们打算使用ZooKeeper集群作为服务注册中心。注册中心会暴露给服务提供方和服务消费方,所以注册服务的时候,服务先提供方只需要提供Nginx的地址给注册中心,但是注册中心并不会把这个地址暴露给服务消费方,如图所示:
我们先定义一下,通信双方需要使用的接口,如下所示:
01 | package org.shirdrn.platform.dubbo.service.rpc.api; |
02 |
03 | public interface SolrSearchService { |
04 |
05 | String search(String collection, String q, ResponseType type, int start, int rows); |
06 |
07 | public enum ResponseType { |
08 | JSON, |
09 | XML |
10 | } |
11 | } |
Provider服务设计
Provider所发布的服务组件,包含了一个SolrCloud集群,在SolrCloud集群前端又加了一个反向代理层,使用Nginx来均衡负载。Provider的搜索服务系统,设计如下图所示:
上图中,实际Nginx中将请求直接转发内部的Web Servers上,在这个过程中,使用ZooKeeper来进行协调:从多个分片(Shard)服务器上并行搜索,最后合并结果。我们看一下Nginx配置的内容片段:
01 | user nginx; |
02 | worker_processes 4; |
03 |
04 | error_log /var/log/nginx/error.log warn; |
05 | pid/var/run/nginx.pid; |
06 |
07 |
08 | events { |
09 | worker_connections 1024; |
10 | } |
11 |
12 |
13 | http { |
14 | include /etc/nginx/mime.types; |
15 | default_type application/octet-stream; |
16 |
17 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
18 | '$status $body_bytes_sent "$http_referer" ' |
19 | '"$http_user_agent" "$http_x_forwarded_for"'; |
20 |
21 | access_log /var/log/nginx/access.log main; |
22 |
23 | sendfileon; |
24 | #tcp_nopush on; |
25 |
26 | keepalive_timeout 65; |
27 |
28 | #gzip on; |
29 |
30 | upstream master { |
31 | server slave1:8888 weight=1; |
32 | server slave4:8888 weight=1; |
33 | server slave6:8888 weight=1; |
34 | } |
35 |
36 | server { |
37 | listen 80; |
38 | server_name master; |
39 | location / { |
40 | root /usr/share/nginx/html/solr-cloud; |
41 | index index.html index.htm; |
42 | proxy_pass http://master; |
43 | include /home/hadoop/servers/nginx/conf/proxy.conf; |
44 | } |
45 | } |
46 | } |
首先保证服务注册中心的ZooKeeper集群正常运行,然后启动SolrSearchServer,启动的时候直接将服务注册到ZooKeeper集群存储中,可以通过ZooKeeper的客户端脚本来查看注册的服务数据。一切正常以后,可以启动运行客户端SearchConsumer,调用SolrSearchServer所实现的远程搜索服务。
核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
1. 项目核心代码结构截图
项目模块依赖
特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化
2.项目依赖介绍
2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:
2.2 Dubbo独立服务项目依赖如下图:
3. 项目功能部分截图:
zookeeper、dubbo服务启动
dubbo管控台
REST服务平台
相关文章推荐
- [转载] Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门 【转】
- Dubbo实现RPC调用使用入门
- 使用Dubbo实现RPC调用
- Netty学习之旅------高仿Dubbo服务调用模型、私有协议实现、编码解码器使用实践
- RabbitMQ .NET消息队列使用入门(三)【MVC实现RPC例子】
- 【原】通过Dubbo注解实现RPC调用
- 【远程调用框架】如何实现一个简单的RPC框架(二)实现与使用
- 使用Zipkin和Brave 实现dubbo服务调用跟踪
- Dubbo原理简介------自己动手实现简单的RPC调用