.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: ...
随机推荐
- Nginx状态码499
1.问题描述 140.207.202.187 - - [18/May/2016:10:30:58 +0800] "POST/v3/violations HTTP/1.1" 499 ...
- [整]SQL执行顺序
SQL的执行顺序: 第一步:FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate ...
- 金士顿U盘,群联PS2251-60主控,量产还原教程
还原成一个可移动磁盘教程,只是在"分区设置"中将 "模式=21" 改为 "模式=3" 即可. 1. 打开:"MPALL_F1_90 ...
- iOS tabbar 自定义小红点 消息显示,定制边框、颜色、高宽
一般我们需要显示消息数,会利用到系统提供的api UIApplication.sharedApplication().applicationIconBadgeNumber = 10 但如果我们不想显示 ...
- Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)
最近写的APP,老师说我的登陆界面虽然有ScrollView滑动,但用户体验不太好,因为软键盘会挡住输入框或登录button(小米Pad,横屏,当指定只能输入数字时没找到关闭系统自带键盘的下箭头). ...
- css font-weight原理
为什么要记录一下?因为今天我要设置一个字符加粗,然后就用font-weight:200,没有任何效果.现在看来很可笑,400才相当于normal,200怎么加粗,奇怪的是也没有变细.所以得研究一下fo ...
- POJ1014Dividing[多重背包可行性]
Dividing Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 68769 Accepted: 17955 Descri ...
- Windows系统小知识
前言 本文写作于Window10发布后的2015-08-01,新系统发布后我做了新系统的小白鼠,所以写此文以作记录. WIN10各版本下载地址:http://www.ithome.com/html/w ...
- 精通CSS version2笔记之⒈选择器
1.常用的选择器:①元素选择器 指定希望应用样式的元素.比如:p {color:#fff;}②后代选择器 寻找特定元素或者元素的后代. 比如:body p{color:#ccc;} 这个选 ...
- dp入门问题
昨天晚上的rank彻底废了..一个星期没敲代码完全没手感.作为总结,贴一道昨天浪费了我两小时的dp.http://acm.dirring.com/problem.php?cid=1003&pi ...