有一段时间没有思考代码相关的工作了,最近项目经常碰到不同业务流水号的生成,下面的技术人员每次都针对流水号生成写一些复杂的代码;为了解放以后这方面的工作于是动了一下脑子想一个动态可配置的流水号生产组件,虽然没写代码一段时间但脑子在这方面还是挺灵活,大概想了一下基本就构建出一个通用业务流水号配置功能,以下分享一下这个设计。 流水号拆分 其实业务流水号都是由不同总分组成,每部分都表达不同的含意。所以在设计上需要对流水号进行分解。以"GZ201602020001RJ"的主要组成部分:{GZ}{20160202} ...
        在有些场景下需要动态加载一些C#代码执行,这种情况往往是让C#当作一些逻辑脚本来执行.这样可以随时修改代码即可以反映到应用程序中.为了解决这一功能以下提供一个非常简单的组件script4net来完成这一功能.通过script4net可以动态加载C#,VB.NET文件或代码文本. 应用1 CS4Script.Script script = new Script(); script.LoadCSCode(@" using System; class Program { ...
        EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono。通过EC容器可以让开发人员在不了解Socket网络通讯知识和不进行任何配置的情况即可把逻辑应用部署到一个网络通讯服务中。EC的目标让开发人员在编写传统Socket网络通讯服务的时候就象编写asp.net应用一样简单,只需要定义消息和控制器方法即可实施一个基于网络Socket通讯应用服务程序。         以下 ...
在之前的文章中简单描述了一下如何通过LRU结合多层缓存机制实现高命中的缓存,这一章节里的主要内容是深入地了解其原理的实现. LRU算法 什么是LRU算法? LRU是Least Recently Used的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的.通过这种算法可以把最近使用的数据迁移到数据存储的热区,而不常用的数据则迁到数据存储的冷区;通过数据存储分区那在清除局部冷区数据相应要处理的复杂底就会降低.在.NET中可以通过一个双向链表来实现冷热交互的结构,大概结构如下: 以上是一个基于双向链表存储的原理,新添加进来的数据会添加到头部,当 ...
在Configuration Agent设计的时候就已经明确兼容.NET默认Configuration的使用规则,下而看一下Configuration Agent和.NET默认Configuration使用的对比。 AppSettings System.Configuration.ConfigurationManager value = System.Configuration.ConfigurationManager.AppSettings["PreserveLoginUrl"]; Configuration4Net.ConfigurationManager ...
提出Configuration Agent这样一个东西可能会让人感到奇怪,对于配置信息读取什么还需要一个Agent;那Agent的作用是什么,能达到一个怎样的目的,下面讲解为何需要Agent和其重要性。 普通应用场景 一般情况每个应用都会获取本应用域下的配置信息,在应用单一部署的情况一般不会存在什么问题,毕竟不需要配置同步等维护工作。 多应用部署场景 如果应用规模大一个应用多服务器部署则是一件非常普遍的事情。那这个时候的配置维护更新的问题。 存在问题 相信经历应用多服务器部署的朋友都应该了解, ...
     以下是通过Beetle.Redis组件操作Redis完成一个简单的订单查询功能。 配置 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="redisClientSection" type="Beetle.Redis.RedisClientSection, Beetle.Redis, Version=1.0.0.0, Culture=neutral, P ...
目标 在业务处理上经常需要使用MQ作为消息流转和分发的渠道,但不同MQ产品其提供的操作方式都有着不同的差异性存在,这样会使开发人员使用起来就相对比较麻烦;MQ Client Agent的设计目的就是提供一个统一的MQ写入规则,让开发人忽略具本MQ操作的细节,即使在更换MQ产品的时候也可以在不修改现有逻辑代码的前提下轻易达到切换不同的MQ产品能力. 功能 提供消息统一写入规则功能库 支持可配置的MQ Connection Provider 支持可以的Message Handler 结构 功能类 ...
      在写TCP服务的时候经常需要面对的问题就是如何知道一个TCP连接当前是否有效,但这个问题对很多初入门的同学来说是很困惑的,主要原因是当对方关闭连接后,另一方无法有效的知道;对于同步操作来说可以通过设置操作超时来解决,但异步操作则没有这样方便的了,那只能等keepalive的检测完成引发异步回调了。       那在编写应用的时候一般通讯什么方式来检测连接的有效性呢?解决方法一般有两种一种是设置TCP的keepalive时间,另一种则是通过Ping,Pong的方式来实现。前者相对比较简单通过socket.IOCon ...
在很多业务场景下需要由生成一个唯一ID,而其唯一性是针对业务上所有服务器。其实生成唯一ID的方式有很多,数据库自增或序列,提供一个生成服务和用GUID。以下介绍一个64位的唯一ID生成规则,而它并不需要依赖任何服务。 ID生成规则 服务之间的唯一性,为了实现这一点必须有一个标识来区分不同服务器之间的差异值。开始打算采用配置一个服务器标识来处理,后来发现应用起来存在配置不方便;为了实现这一目标采用了ipaddrsss存储的后两位,经过思考对于一个应用来说其不同服务器部署的IP段后两位不可能存在重复,因此这样可以很好地分离出不同服务器生成的ID值区间。不过着服务部署的更改以后 ...