文档章节

关于消息变更的最佳实践

xpbob
 xpbob
发布于 2017/05/21 14:05
字数 562
阅读 347
收藏 3
点赞 0
评论 0

问题描述

      工作中遇到的场景拿出来分享一下:

      最初需求

      程序启动读取配置文件,然后根据这些配置项去做一些任务,具体的任务会多次读取相应的配置项。最初的设计如下。

      

        ConfigProperties主要是读取配置文件的,FileTask(线程任务)就是执行任务的类,在doTask中通过getProperties来获取相应的配置。这个设计本来没什么问题,而且也满足了单一职责的设计。

       需求变更

        想让配置文件改变可以动态生效,没必要重启生效。

        

        MessageChanged是另外一个线程,当有改变时触发去触发configProperties的操作。同事就是这样实现的,变成了一个标准的多线程模式,用锁去锁了临界资源——配置文件的具体项。这就要求读取配置的同时,不能更新配置项。业务需求(filecount,filename,filepath)三者必须用的是同一个版本。这样就要求读写必须是互斥的,加锁是满足了这个需求,但是FileTask获取三个配置的地方特别分散。加锁的范围特别大。这样效率一点也不好。两个线程持有锁的时间都太久了。

        

            于是做了一点更变,那就是把数据存储进行了一层包装,数据都是分组存放的,每个组都是volatile的。这样加锁的操作变成了对一个变量的赋值和取值。

消息通知的套路

        上述的模式已经比较明朗了,当遇到这种消息变更的,处理的方式其实都是相似的,主要就是锁分离。

        1,首先需要本地缓存,就是旧的配置需要一份。

        2,运行任务的整体配置得组装到一起,以便原子性的更新。

        3,消息通知模式

                观察者模式

                事件机制

                队列机制(变更消息写入队列,每次先都去读取一次队列,决定是本地缓存还是新传入的值)

                多次读取(上面使用的情况)

 

        

© 著作权归作者所有

共有 人打赏支持
xpbob
粉丝 86
博文 75
码字总数 59756
作品 0
Android 应用兼容性最佳实践 | 中文教学视频

本期中文视频向各位开发者介绍如何现代化您的应用,其中包括 Android O、Android P (预览版) 的新特性、行为变更、应用开发中常见的兼容性最佳实践,以及测试、兼容系统时需要注意的一些事项...

谷歌开发者
07/16
0
0
囊括13个方面,Linux 容器技术一览表!

  【IT168 评论】容器是现在非常火的概念,基本上技术圈里的人都在谈,但其实容器技术的概念可以追溯到1979年,UNIX chroot是一套"UNIX操作系统"系统,旨在将其root目录及其它子目录变更至...

it168网站
2017/12/14
0
0
十年磨一剑,阿里巴巴企业级数据管理平台:iDB

摘要: 阿里巴巴企业级数据库管理平台iDB面向云时代推出数据管理DMS企业版,是业界首创的数据库DevOps解决方案,形成了云时代企业数据管理的最佳实践。 十年间,阿里巴巴的研发人员也增长了十...

全部原谅
2017/08/15
92
1
最佳实践系列:常规项目管理(跨部门项目)的12个最佳实践

常规的项目管理 需求分析 明确原始需求【必须要接触最原始的用户需求】 忽略需求方提出的所谓解决方案——最佳实践1 竞品分析 撰写UseStory 拉FeatureList 分期实现小步快跑 轮询各个系统负责...

陶邦仁
2015/10/03
188
0
PgSQL · 应用案例 · 流式计算与异步消息在阿里实时订单监测中的应用

背景 在很多业务系统中,为了定位问题、运营需要、分析需要或者其他需求,会在业务中设置埋点,记录用户的行为在业务系统中产生的日志,也叫FEED日志。 比如订单系统、在业务系统中环环相扣,...

阿里云RDS-数据库内核组
2017/11/09
0
0
读完这19本经典,成为优秀架构师其实也不难(附下载链接)

数人云之前给大家分享了《成为“伟大”程序员需要学会的9种“姿势”》对于想转型成为架构师的童鞋们来说最急缺的是什么呢?当然是经验和实践案例,数人云今天精挑细选了19本架构师必读经典,...

数人云
2017/11/06
0
0
【基础】EM 还是 REM?这是一个问题!

简言 应用象 和 这种相对长度单位进行页面排版是WEB开发中的最佳实践。在页面排版中较好应用 和 ,根据设备尺寸缩放显示元素的大小。这就使得组件在不同设备上都达到最佳的显示效果成为可能。...

毛三十
04/20
0
0
JSON for Modern C++ 3.0.0 正式发布:包含重大变更

在将近一年的开发之后,JSON for Modern C++ 终于发布了它的全新版本,这是一个主要的版本。由于坚持语义化,所以该版本会有一些破坏性的变更,建议在更新之前仔细阅读发布说明。此外,还增加...

局长
2017/12/18
3.4K
11
五大Kubernetes最佳实践

在最近的一次Weave用户组在线会议WOUG[1]上两个工程师做了Kubernetes相关的分享。 谷歌云的开发者布道师Sandeep Dinesh(@SandeepDinesh)做了一个演讲,给大家列举了在Kubernetes上运行应用...

Docker
04/15
0
0
[教程] 推荐 Android + PHP 最佳实践视频教程

这几个月实在太忙了,一直没有时间关顾博客,不过好在日前花费了不少心血的视频教程《Android+PHP最佳实践》已经在华章教育和China-Pub上线了,在这里给大家简短的推荐一下吧:本系列视频教程...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

eclipse SVN 项目重新定位

SVN 重新定位 1.方法一 首先:在Eclipse中选择Windows-> Show View->others 就会出现【SVN资源库/SVN Repositories】,选中后,点击确认; 然后:选中原有的地址,选择【重新定位/Relocate】...

qimh
9分钟前
0
0
Linux 第29课 ——Linux集群架构(下)

Linux集群架构(下) 八、DR模式搭建 8.1 准备工作 试验需求三台机器: 分发器,也叫调度器(简写为dir) 192.168.112.136 ying01 rs1 192.168.112.138 ying02 rs2 192.168.112.139 ying03 vip...

feng-01
14分钟前
0
0
轻松搭建svn版本管理工具+svnmanager管理客户端

前面的文章有写过svn版本管理工具的安装是基于svn的安装包进行安装,对于svn与apache的结合还得下svn和apache的模块进行结合过程比较繁琐,今天来介绍下通过centos的yum来安装svn能够快速安装...

javazyw
24分钟前
0
0
keepalived配置高可用集群

Linux集群概述 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:...

TaoXu
29分钟前
0
0
mysql联表批处理操作

1 概述 mysql中的单表增删改查操作,可以说是基本中的基本. 实际工作中,常常会遇到一些基本用法难以处理的数据操作,譬如遇到主从表甚至多级关联表的情况(如一些历史问题数据的批量处理),考虑到...

社哥
32分钟前
0
0
IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
46分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
49分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
49分钟前
1
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
50分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
53分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部