文档章节

JFinal 中使用 Dubbo —— 3 集群

 糊搞
发布于 2015/04/21 00:00
字数 1578
阅读 11119
收藏 247
点赞 22
评论 25

1. 集群

1.1. 部署结构

下面是一个简单的Cunsumer端服务器和Provider端服务器分别集群的部署图:

在个人开发机上,实现Cunsumer端服务器集群难以实现,所以此Demo中只实现Provider端服务器集群,Cunsumer端服务器集群请读者在有条件的情况下自行实践。

 

1.2. 部署Dubbo管理控制台

Dubbo管理控制台的部署相当简单,由于开发机是Windows 7系统,所以此处也只介绍Windows环境下的部署过程。

具体步骤如下:

  • 独立出一个Tomcat环境,将“dubbo-admin-2.5.3.war”(文件放在JFinalDubboDemoApi项目)中所有的文件解压到新Tomcat的“webapps\ROOT”下(原ROOT文件夹下的所有文件都要删除)。

  • 编辑“webapps\ROOT\WEB-INF\dubbo.properties”文件。

dubbo.registry.address=multicast://224.5.6.7:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

修改第一个配置项就好,设置的值要与consumer.xmlprovider.xml中“dubbo:registry”标签的“address”值相同。后面两行分别是root用户和guest用户的密码。

提示,可以是RedisDubboMultiCatZooKeeper之间的一种。

  • 启动控制台

    执行Tomcat.bat


1.3. 启动Cunsumer和多个Provider

  • 首先按前面非集群的方式分别启动CunsumerProvider端的Tomcat

注意:加上Dubbo管理控制台就是3Tomcat实例被启动,不要让端口冲突。

  • 用一般Java应用方式启动多个Provider

到了这里,Provider中创建启动类的作用就显现出来了。修改provider.xml中“dubbo:protocol”的“port”属性为“20881”(一定要确保修改后立即保存),右键点击“DemoProviderApp.java”,以“Run As - Java Application”方式启动Provider

 

重复上面,再次修改“port”属性为“20882”(再加1),启动Provider

打开Java控制台,可以看到,2Tomcat应用和2个一般Java应用在运行:

 

再修改,再启动。。。。。。随读者意,只要电脑能承受即可。

 

  • 访问Dubbo管理控制台

浏览器中打开“http://192.168.1.100:8080/”,输入用户名和密码均为“root”后,进入主页面:

 

 

  • 查看提供者、消费者

点击主页中的菜单:

 

进入提供者信息页:

 

可以看到3提供者,它们的端口与启动配置相同。读者自行点击消费者页面,这里就不再浪费篇幅了。

 

  • Provider的集群配置

点击“负载均衡 新增”:

 

在打开的页面中如下配置:

 

完成后可看到一条负载均衡配置:

 

细心的读者可能就已经发现了,负载均衡配置居然是细到每个接口上的。没错,Dubbo不亚于Spring一类的存在,它有太多强大的东东没有在此文中出现,等待各位去发掘。

我们回头再来看看Dubbo存在的背景,瞬间再次觉得高大上啊~~~

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

·单一应用架构

· 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。

· 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。

· 垂直应用架构

· 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。

· 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。

· 分布式服务架构

· 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。

· 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。

· 流动计算架构

· 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。

· 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

Ø 验证负载均衡

验证就简单了,在JFinal DemoBlog List页面中,频繁刷新。可以看到,每个Provider服务都在刷新3次时出现操作Sql,说明轮询方式的负载均衡策略已经起作用了。读者可切换不同的负载均衡策略再试试看效果,条件好的还可用测试工具测试下性能,那感觉,一定爽。

 

provider中通过配置方法也可以实现集群,而不用在Dubbo管理控制台中手动设置,此问题就留给读者自己摸索。笔者就不再教了,授人以鱼不如授人以渔,瞬间觉得自己好高大。。。。。。

 

1.4. 问题及解决方案

1.4.1. 多网卡问题

笔者的开发机多网卡时上遇到了问题,因为装了VMWare,所以有了虚拟网卡,在使用集群时,被IP不正确的问题搞得灰头土脸。

不打算在这里说明如何解决,因为不要期待他人帮你解决所有问题,很多问题得靠自己。。。。。。(好吧,笔者承认真实原因是不想打字了)


源码地址:

JFinalDubboDemoApi.zip

JFinalDubboDemoConsumer.zip

JFinalDubboDemoProvider.zip



Dubbo文档:

Dubbo 的文档镜像


找了一阵没找到dubbo-admin-2.5.3.war,因为太大没有直接上传到OSC。下面是CSDN分享的dubbo-admin-2.5.4.war,笔者没验证过,应该是可用的:

dubbo-admin-2.5.4.war


系列文章:

JFinal 中使用 Dubbo —— 1 改造JFinal Demo

JFinal 中使用 Dubbo —— 2 部署及运行

© 著作权归作者所有

共有 人打赏支持
粉丝 80
博文 5
码字总数 10741
作品 0
深圳
程序员
加载中

评论(25)

钤术
钤术
bvb 134
糊搞

引用来自“泡泡队长”的评论

楼主,“在个人开发机上,实现Cunsumer端服务器集群难以实现,所以此Demo中只实现Provider端服务器集群”,消费端的集群有例子吗?

研究一下Nginx就明白了
泡泡队长
泡泡队长
楼主,“在个人开发机上,实现Cunsumer端服务器集群难以实现,所以此Demo中只实现Provider端服务器集群”,消费端的集群有例子吗?
陌路千里
陌路千里
不错哦42
糊搞

引用来自“zxdouzx”的评论

hello, 我在用到这个dubbo admin 发现如果我手动把某一个provider的进程删了,但是dubbo- admin上不会有实时的响应, 还是展示出来有这个provider, 但是如果我把dubbo admin这个tomcat 重启一下 就看不到了, 我没看源代码, 是不是他的信息不是实时的?刷新页面不是实时的获取zookeeper下最新的节点信息么?

引用来自“糊搞”的评论

这个我没有研究过,不过,据我了解的远程服务类软件,并不是说在你刷新监控页面时实时获取远程服务的状态。因为,远程服务由于网络原因或机器资源占用的原因,响应很慢,是不是监控页面需要等待更长时间?明显不合理。。。 一般都是有一种类似定时检测的手段,也就是每隔一定时间去Ping一下远程服务,或由服务提供方每隔一定时间将自己的状态告知。Dubbo明显用的是后者,在你将某一个provider的进程删除时,provider已经不存在了,无法通知给Admin,于是你看到的监控页面上还是存在有这个provider。。。

引用来自“zxdouzx”的评论

其实这个admin 就是去读取zookeeper下面的节点信息? 应该是要实时的才对呀, 要不然我删掉某个provider 他都还有显示,而且还可以对它进行操作, 是不是这个是一个阉割版的原因?
你要搞清楚工作原理,不是说所有东东都要实时,,,admin上查看状态信息不实时对操作无影响的。打个比方,admin中显示有2个Provider在工作,Consumer调用Provider时,自动指到Provider 1。但Provider 1的服务失败(已经被你删进程了),自动由Provider 2提供服务,服务照样成功。如果Provider 2也不能提供服务,则Consumer会收到异常。这与Admin上的Provider监控信息有关系吗,监控是给你看的不是给Consumer看的?
z
zxdouzx

引用来自“zxdouzx”的评论

hello, 我在用到这个dubbo admin 发现如果我手动把某一个provider的进程删了,但是dubbo- admin上不会有实时的响应, 还是展示出来有这个provider, 但是如果我把dubbo admin这个tomcat 重启一下 就看不到了, 我没看源代码, 是不是他的信息不是实时的?刷新页面不是实时的获取zookeeper下最新的节点信息么?

引用来自“糊搞”的评论

这个我没有研究过,不过,据我了解的远程服务类软件,并不是说在你刷新监控页面时实时获取远程服务的状态。因为,远程服务由于网络原因或机器资源占用的原因,响应很慢,是不是监控页面需要等待更长时间?明显不合理。。。 一般都是有一种类似定时检测的手段,也就是每隔一定时间去Ping一下远程服务,或由服务提供方每隔一定时间将自己的状态告知。Dubbo明显用的是后者,在你将某一个provider的进程删除时,provider已经不存在了,无法通知给Admin,于是你看到的监控页面上还是存在有这个provider。。。
其实这个admin 就是去读取zookeeper下面的节点信息? 应该是要实时的才对呀, 要不然我删掉某个provider 他都还有显示,而且还可以对它进行操作, 是不是这个是一个阉割版的原因?
糊搞

引用来自“zxdouzx”的评论

hello, 我在用到这个dubbo admin 发现如果我手动把某一个provider的进程删了,但是dubbo- admin上不会有实时的响应, 还是展示出来有这个provider, 但是如果我把dubbo admin这个tomcat 重启一下 就看不到了, 我没看源代码, 是不是他的信息不是实时的?刷新页面不是实时的获取zookeeper下最新的节点信息么?
这个我没有研究过,不过,据我了解的远程服务类软件,并不是说在你刷新监控页面时实时获取远程服务的状态。因为,远程服务由于网络原因或机器资源占用的原因,响应很慢,是不是监控页面需要等待更长时间?明显不合理。。。 一般都是有一种类似定时检测的手段,也就是每隔一定时间去Ping一下远程服务,或由服务提供方每隔一定时间将自己的状态告知。Dubbo明显用的是后者,在你将某一个provider的进程删除时,provider已经不存在了,无法通知给Admin,于是你看到的监控页面上还是存在有这个provider。。。
z
zxdouzx
hello, 我在用到这个dubbo admin 发现如果我手动把某一个provider的进程删了,但是dubbo- admin上不会有实时的响应, 还是展示出来有这个provider, 但是如果我把dubbo admin这个tomcat 重启一下 就看不到了, 我没看源代码, 是不是他的信息不是实时的?刷新页面不是实时的获取zookeeper下最新的节点信息么?
糊搞

引用来自“云端之泽”的评论

博主,我在按照你的流程整合jfinal和dubbo的时候,发生了spring插件启动报错:
Plugin start error: com.jfinal.plugin.spring.SpringPlugin. |Error creating bean with name 'cn.gh.duboo.demo.service.BlogService': Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError

尝试替换spring或者dubbo的版本,没有效果。请问你有遇到过这类问题吗?
是用文章中提供的源码试验的么?
云端之泽
云端之泽
博主,我在按照你的流程整合jfinal和dubbo的时候,发生了spring插件启动报错:
Plugin start error: com.jfinal.plugin.spring.SpringPlugin. |Error creating bean with name 'cn.gh.duboo.demo.service.BlogService': Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError

尝试替换spring或者dubbo的版本,没有效果。请问你有遇到过这类问题吗?
Jboot v1.4.9 发布,核心 JFinal 升级到 3.4 最新版本

Jboot 是一个基于 JFinal 和 Undertow 开发的微服务框架。提供了 AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、Opentracing 数据追踪、metrics 数据监控、分布式 session、代码生...

理工男海哥 ⋅ 05/03 ⋅ 0

JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal ⋅ 04/28 ⋅ 129

jfinal-admin 3.2 发布,beetl 模板升级到 2.7.14

jfinal-admin 3.2 版本正式发布啦。 基于JFinal的后台管理系统,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap框架。 演示地址 http://jad.yxyun...

IT小香猪 ⋅ 04/19 ⋅ 0

JAVA 极速WEB+ORM框架 - JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、p...

JFinal ⋅ 2012/03/18 ⋅ 496

Jboot v1.5.3 发布,修复 bug 和优化缓存

Jboot 是一个基于 JFinal 和 Undertow 开发的微服务框架。提供了 AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、Opentracing 数据追踪、metrics 数据监控、分布式 session、代码生...

理工男海哥 ⋅ 05/17 ⋅ 0

jfinal兼容oracle integer字段

为什么oracle integer字段用了number(3,0),jfinal生成的字段还是BigDecimal @jfinal

tianxia007 ⋅ 05/02 ⋅ 0

JFinal如何使用JNDI连接数据库

想用JNDI的方式连接数据库,但是JFinal中用的是DruidPlugin和ActiveRecordPlugin,没有看到用DataSource的地方?请问JFinal支持JNDI连接方式吗?怎么具体实现?...

zqq3436 ⋅ 06/11 ⋅ 0

kiplinglee/jfinal-ioc-plugin

jfinal-ioc-plugin JFinal 依赖注入插件 1.在JFinalConfig文件中配置IOC插件 @Overridepublic void configConstant(Constants me) { // 创建controller实现依赖注入me.setControllerFactory......

kiplinglee ⋅ 04/13 ⋅ 0

JFinal 1.6可以无缝升级到最高哪个版本?

大约在JFinal 1.6的时候做了一个项目,一直运行至今。中途没升级也没做功能扩展,时至今日,需要做功能升级了,但是时隔太久远,基本不记得JFinal这个框架一路过来的升级过程了。所以想请求帮...

车开源 ⋅ 05/11 ⋅ 0

JFinal(1.6)在Validator里执行过getFile,在Controller里取不到文件

JFinal在Validator里执行过getFile之后Validator中是可以取到文件及有关信息,但是在Controller里取不到文件,是不是我的姿势不正确?@JFinal

车开源 ⋅ 05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部