文档章节

关于消息变更的最佳实践

xpbob
 xpbob
发布于 2017/05/21 14:05
字数 562
阅读 350
收藏 3

问题描述

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

      最初需求

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

      

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

       需求变更

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

        

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

        

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

消息通知的套路

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

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

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

        3,消息通知模式

                观察者模式

                事件机制

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

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

 

        

© 著作权归作者所有

共有 人打赏支持
xpbob
粉丝 98
博文 90
码字总数 72010
作品 0
高级程序员
私信 提问
消息提示的架构演进-理论篇

本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/685995,如需转载请自行联系原作者项目是一个互联网应用。   假设项目有不同的用户群体,每个用户群体的前端都是...

像教授
2017/11/26
0
0
驰骋工作流引擎关于发送接口的变更与ccflow的发送后返回的SendReturnObjs对象。

关于发送接口的变更与ccflow的发送后返回的SendReturnObjs对象。 各位ccflow的API开发者: 根据不同的设备获取发送后的信息需要,现在ccflow的发送接口变更如下。 1, 取消了WorkNode 类中的...

ccflow
2012/12/13
0
0
Linux下高效的日志库的应用 (资源)

日志就是按照时间顺序追加的、完全有序的记录序列,其实就是一种特殊的文件格式,文件是一个字节数组,而这里日志是一个记录数据,只是相对于文件来说,这里每条记录都是按照时间的相对顺序排...

寰宇01
04/23
0
0
蚂蚁金服:消息队列事务型消息原理浅析

在金融级分布式架构的领域内,消息队列是普遍被应用的异步通信产品,本文主要分为以下几个小结,循序渐进的对消息队列产品事务型消息设计原理进行分析和阐述: 消息队列简介 消息队列应用实例...

技术小能手
05/23
0
0
Android 应用兼容性最佳实践 | 中文教学视频

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

谷歌开发者
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

get和post详解

get和post是表单提交的两种方式,get请求数据通过域名后缀URL传送,用户可见,不安全,post请求数据通过在请求报文正文里传输,相对比较安全。get是通过URL传递表单值,post通过URL看不到表单...

青衣霓裳
16分钟前
0
0
linux-如何快速替换IP

在Linux在做高可用的时候,经常会使用到虚拟IP。在windows上一个网卡可以配置两个IP,在Linux直接使用ip命令就可以添加了。 添加 ip address add 192.168.1.200/24 broadcast 192.168.1.255 ...

Linux就该这么学
21分钟前
0
0
Unix-Linux 编程实践教程 第五章 小结

设备文件中用逗号连接起来的两个数字为主设备号和从设备号。主设备号确定实际的设备驱动程序,从设备号作为参数。 如下图中的,主设备号-4,从设备号-2 设备文件中的i-node存储的是指向内核子...

Explorer0
23分钟前
0
0
virtual box centos7 挂载进行文件和共享使用说明

一、virtualbox共享文件夹无访问权限问题解决方法 (转载 http://www.cnblogs.com/zhuguanhao/p/6192777.html) 这篇文章主要介绍了virtualbox共享文件夹无访问权限问题解决方法,造成这个问题...

mbzhong
26分钟前
0
0
Rabbitmq---消息队列

一 . MQ:message queue   消息队列的作用:   1 通信解耦   2 高峰限流 原理分析: 一开始,认证系统是强耦合的,A系统传递认证系统消息接收计算结果的过程中   1 传给认证系统   2 认...

Ala6
30分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部