使用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; |
03 | public interface SolrSearchService { |
05 | String search(String collection, String q, ResponseType type, int start, int rows); |
07 | public enum ResponseType { |
基于上图中的设计,下面我们分别详细说明Provider和Consumer的设计及实现。
Provider所发布的服务组件,包含了一个SolrCloud集群,在SolrCloud集群前端又加了一个反向代理层,使用Nginx来均衡负载。Provider的搜索服务系统,设计如下图所示:
上图中,实际Nginx中将请求直接转发内部的Web Servers上,在这个过程中,使用ZooKeeper来进行协调:从多个分片(Shard)服务器上并行搜索,最后合并结果。我们看一下Nginx配置的内容片段:
04 | error_log /var/log/nginx/error.log warn; |
05 | pid /var/run/nginx.pid; |
09 | worker_connections 1024; |
14 | include /etc/nginx/mime.types; |
15 | default_type application/octet-stream; |
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"'; |
21 | access_log /var/log/nginx/access.log main; |
31 | server slave1:8888 weight=1; |
32 | server slave4:8888 weight=1; |
33 | server slave6:8888 weight=1; |
40 | root /usr/share/nginx/html/solr-cloud; |
41 | index index.html index.htm; |
43 | include /home/hadoop/servers/nginx/conf/proxy.conf; |
运行说明
首先保证服务注册中心的ZooKeeper集群正常运行,然后启动SolrSearchServer,启动的时候直接将服务注册到ZooKeeper集群存储中,可以通过ZooKeeper的客户端脚本来查看注册的服务数据。一切正常以后,可以启动运行客户端SearchConsumer,调用SolrSearchServer所实现的远程搜索服务。
框架简介:
本系统一款通用的SOA中间件平台,用来开发各类J2EE企业级应用,节省时间和人力成本。本系统采用MVC模式、AOP引擎、任务调度器、Ajax、拦截器、过滤器、缓存、日志监控、数据访问、表达式、国际化等技术。
框架/平台构成:
Maven+Springmvc + Mybatis + Shiro(权限)+ Tiles(模板) +ActiveMQ(消息队列) + Rest(服务) + WebService(服务)+ EHcache(缓存) + Quartz(定时调度)+ Html5(支持PC、IOS、Android) 用户权限系统:
组织结构:角色、用户、用户组、组织机构;权限点:页面、方法、按钮、数据权限、分级授权
项目管理新体验:
快速出原型系统、组件树、版本控制、模块移植、协同开发、实时监控、发布管理
可持续集成:
所有组件可移植、可定制、可扩充,开发成果不断积累,形成可持续发展的良性循环
支持平台平台:
Windows XP、Windows 7 、Windows 10 、 Linux 、 Unix
服务器容器:
Tomcat 5/6/7 、Jetty、JBoss、WebSphere 8.5
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/4PlhMEt3uLPUJqrsbtOoyg==/4861635797847281602.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/CG2nJKrKMJfy75jFRLuBwg==/6598205562228862577.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/yhPEXU5txhLNoXXhgeLycw==/2871607712502861641.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/F2j_W3OTqqcFCqzNI0TJmA==/3756846514257653360.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/qYtF9XuNBcKOPhrYxggOlw==/6598271532926527468.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/BSA6EQ5RF6iqV0NIzUk36w==/4918775218119126142.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/clSvn6C94u4yTpd67mxauQ==/3763320438721884342.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/Ydj1RbZHkLRFaUJVKpkDmA==/6598238547577691305.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/kBslFAhKTogTQRYyYiqBhg==/6598239647089319070.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/r0c0ojHEwZyz8iwHsz2o5g==/4884435270960541274.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/VsxRbnZsUMseV04g9nL8Yg==/4937352566582144602.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/gGHU58PW6eVSjsV13VKSjQ==/6598268234391644144.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/WWAhFJIvAe1YJ56DHFUCOQ==/2871889187479602965.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/sSA3sZAhde7FRJteDIe-hw==/6598131894949800994.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/Wg2QZNpmiqnZbaUuckVGqg==/1995376110002668108.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/4qcixH9DxQj4TdsOrJl0Rg==/1995094635026164344.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/RQEebfb8xx8uT0K5g3MJxg==/1994813160049114259.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/sPUCvbNaQl46iIkBAVMTFw==/6598260537810252049.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/lg1LvRYVYv6MovwWkVawxg==/1998753809723010961.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/S8MsYe280b2gctrTt5Q6Yw==/6631224995867754446.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/jAPod2WQ9lztyLZLxXLUXA==/6598131894949801003.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/OZbIlAPE_vRg7yAGRuzi3w==/1994813160049114267.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/o4iE0UZCnNlQD0V2-oEnYw==/6598204462717234809.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/42__CHPIifF_Nwuno1eidQ==/4926375042490552190.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/JPs69j0ruBKjLW7SBVbkBw==/6598246244159086145.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/Mr5nOQHIuazRpuM3URmTZw==/6598208860763745936.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img1.ph.126.net/Er6x217NFwdkzVToy4MG_Q==/6631217299286379313.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/utBlHR53o1zmxfih05RF4g==/6631224995867754452.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/ZAF1Ivw5qhfnXmE8PNU5Mg==/6631223896356126684.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/UhoMwh5qve3D0z_hXHMqGQ==/3751779964676984675.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img2.ph.126.net/V6HjTHt-m05BRM_dfjT2mQ==/6598266035368390916.png)
![JEESZ通用版本分布式模块化开发平台 - zookeeperflume - zookeeperflume的博客](http://img0.ph.126.net/mtamtFLiUJemiXYy_WazvA==/1630021590232051599.png)