.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: ...
随机推荐
- http状态码详细说明
100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在请求完 ...
- eclipse设置显示代码行数(转)
(转自:http://jingyan.baidu.com/article/b2c186c89b7023c46ef6ff27.html) 载入eclipse的主页面,默认以英文版的eclipse为例 点 ...
- 编写NPAPI plugin的命名问题
最近写了个NPAPI的插件,在chrome上用得好好的,结果在火狐上死活不认我的插件,找了N多资料最后在官方的说明里才找到说火狐浏览器的插件的文件名必须是以np开头的,立刻吐血三升,难怪被chrome ...
- Java:JSTL遍历数组,List,Set,Map
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- MMORPG大型游戏设计与开发(客户端架构 part16 of vegine)
由于近来比较忙碌和有些困倦的原因,所以关于这部分的文章没有及时更新,一句话:让朋友们久等了!今天所讲的是客户端vengine(微引擎)中最后一个部分,就像上节所说,这一部分的内容比较多.可能有些朋友看 ...
- 各种隐藏 WebShell、创建、删除畸形目录、特殊文件名、黑帽SEO作弊(转自核大大)
其实这个问题,经常有朋友问我,我也都帮大家解决了…… 但是现在这些现象越来越严重,而且手法毒辣.隐蔽.变态,清除了又来了,删掉了又恢复了,最后直接找不到文件了,但是访问网站还在,急的各大管理员.站长抓 ...
- Java开发之abstract 和 interface的区别
Java开发abstract 和 interface的区别 java开发里面经常会用到虚函数和接口,这两者的区别是什么呢? abstract: 子类里面只能继承一个父类 interface: 子类可以 ...
- 第10章 同步设备I/O和异步设备I/O(1)_常见设备及CreateFile函数
10.1 打开和关闭设备 10.1.1 设备的定义——在Windows中可以与之进行通信的任何东西. (1)常见设备及用途 设备 用途 用来打开设备的函数 文件 永久存储任何数据 CreateFile ...
- pitch yaw roll 的区别
http://blog.163.com/vipwdp@126/blog/static/150224366201281935518196/
- 转:软件架构入门 (from 阮一峰)
说明:其中讲到了 5 种的架构模型,很不错. from: http://www.ruanyifeng.com/blog/2016/09/software-architecture.html