.Net分布式异常报警系统-服务端Service
服务端的2个Service
HandleService
public void Handle()
{
ThreadPool.SetMaxThreads(, ); //设置线程
while (true)
{
string errorEntityId = RedisHelper.DequeueItemFromList("ErrorEntityQueue"); //从Redis中获取数据
if (!string.IsNullOrEmpty(errorEntityId))
{
ThreadPool.QueueUserWorkItem(state =>
{
try
{
//0. 从Redis中获取数据
var errorEntityDto = RedisHelper.Get<ErrorEntityDto>(errorEntityId);
//1. 信息持久到DB, 方便后续查看,统计
ErrorEntity errorEntity = null;
errorEntity = Mapper.Map<ErrorEntity>(errorEntityDto);
errorEntity.NotifyStatus = ; //未通知
_errorEntityBusiness.Insert(errorEntity, false);
//2. 通知到相关责任人
bool issuccess = Notity(errorEntityDto);
if (issuccess)
{
//3. 更新DB中的状态
_errorEntityBusiness.UpdateBySql(string.Format("set NotifyStatus = 1 where Id='{0}'", errorEntity.Id));
}
//4. 删除redis中的数据
RedisHelper.Del(errorEntityId);
}
catch (Exception exception)
{
LogHelper.Error("处理发生异常", exception);
}
//todo 这里应该以有个补救措施, 如果通知失败。 应该再另外一个job中对这些失败的通知重新发送。这里就不写了
}, errorEntityId);
}
else
{
Thread.Sleep(); //如果没有取到数据,则暂停5s
}
}
}
HealthyCheckService
private void Handle()
{
//获取所有的网站, 依次检查返回的是否为ok, 或者检查http.status=200
IEnumerable<WebSite> webSites= _webSiteBusiness.GetList("select * from WebSite where Enable = 1");
Parallel.ForEach(webSites, website =>
{
IEnumerable<WebServer> webServers =
_webServerBusiness.GetList(
(string.Format("select * from WebServer where Enable = 1 and WebId={0}", website.Id)));
Parallel.ForEach(webServers, webserver =>
{
//这里如果你仅仅想获取状态码, 可以调用 HttpHelper.GetHttpStatus方法
var responseText= HttpHelper.SendGetRequest("http://" + webserver.ServerIp + website.CheckUrl, website.Host, website.Host, ,
Encoding.UTF8);
if (responseText != "ok")
{
//站点出了异常,需要发送到服务端进行处理
ClientErrorEntity clientErrorEntity = new ClientErrorEntity();
clientErrorEntity.ExceptionMessage = website.WebName + "(" + "http://" + webserver.ServerIp + website.CheckUrl + ")" + "访问发生异常,异常信息如下:" + responseText;
clientErrorEntity.Ip = webserver.ServerIp;
clientErrorEntity.RequestUrl = "http://" + webserver.ServerIp + website.CheckUrl;
clientErrorEntity.Type = ;
ClientErrorEntity.WebToken = website.WebToken; //重新设置Token
SendErrorEntity.SendError(clientErrorEntity);
}
});
});
}
.Net分布式异常报警系统-服务端Service的更多相关文章
- .Net分布式异常报警系统-服务端站点管理
管理站点 对于管理站点, 并没有太复杂的内容, 主要就是对数据库表中的数据进行维护. 管理的实体有3个 WebSite(站点信息), WebService(站点服务器信息), ErrorEntity ...
- .Net分布式异常报警系统-客户端及服务端API
客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...
- .Net分布式异常报警系统-简介
系统简介 分布式异常报警系统就是收集系统运行过程中产生的未处理异常,检查系统运行的状态,并将异常信息统一发送到服务端,由服务端将信息通知到相关的责任人. 问题 我们在项目开发中可能遇到以下几个问题: ...
- XFire构建服务端Service的两种方式(转)
XFire构建服务端service的两种方式,一是用xfire构建,二是和spring集成构建. 一,xifre构建,确保把xfire的jar包导入到工程中或classpath. 1,service的 ...
- XFire构建服务端Service的两种方式
1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...
- .Net分布式异常报警系统-项目介绍
后台管理 首页统计的是当天每个时段的异常数量, 使用的是echarts组件, 红框所示, 可以选择不同的系统进行查看. 得益于echarts的强大功能, 你可以使用柱状图来查看. 站 ...
- 分布式监控CAT服务端的本地部署
一.CAT简介 CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统.美团点评基础架构部希望在基础存储.高性能通信.大规模在 ...
- 【分布式】Zookeeper服务端启动
一.前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节. 二.服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. ...
- java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码
java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...
随机推荐
- 1、Hadoop的伪分布式部署
伪分布式模式搭建: 1.环境准备 (1)主机名(root用户) # vi /etc/sysconfig/network HOSTNAME=hadoo1 (不要用下划线) (2)创建普通用户cong ...
- 【转】RHadoop实践系列之一:Hadoop环境搭建
RHadoop实践系列之一:Hadoop环境搭建 RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析.Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来 ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作
http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...
- Js 关于console 在IE 下的兼容问题
程序员在开发代码的过程中,使用console作为调试代码过程的一种手段. 发布到测试生产环境,发现IE8 出现加载错误.使用开发者工具调试,发现可以绕过问题. 通过网络搜索和在项目中进行修正. 以下办 ...
- Linux小技巧总结
1.fdisk创建磁盘分区不重启系统partprobe 使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs磁盘分区则需要重启系统才能够读取到/dev/sda*,而使用partprobe则可以使 ...
- 错误“Unexpected namespace prefix "xmlns" found for tag LinearLayout”的解决方法(转)
(转自:http://blog.csdn.net/bombzhang/article/details/12676789) 有一次升级开发工具后发现xml脚本出现错误“Unexpected namesp ...
- FastCV安装报错---LaunchAnyWhere错误:载入Java VM时Windows出现错误:2
- Linux 下子线程的 pthread_cleanup_push() 和 pthread_cleanup_pop() 研究
线程退出前可能有一些清理工作,但是这部分代码又不会放到线程主体部分,就需要挂接一个或者几个线程“清洁工”来做这部分事情.需要这对兄弟: #include<pthread.h> void p ...
- 用FineReport报表系统构建资金监管平台
一.应用背景 计算机的应用已经渗透到日常工作的许多方面,无论是其自身还是所发挥的作用,计算机都标志着一种高科技,使工作高效率和高水平.为了能更方便,更轻松,更好的管理,信息化建设正在日益发展壮大,更加 ...
- C++浅析——继承类中构造和析构顺序
先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象: static int nIndex = 1; class CMember { public: CMember() { p ...