.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: ...
随机推荐
- 第二题 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
package com.hanqi.test; import java.util.ArrayList; import java.util.List; import java.util.Random; ...
- SQL指令中一些特别值得注意的地方
SQL基本指令要频繁使用,要是理解错了,将来工作一定会出现很大的麻烦.今天再重新梳理一下基本的SQL语法 SQL指令 in: 这个指令,我曾经发生过把它和python中的in搞混的错误.python中 ...
- input子系统
input子系统: 像按键.键盘.鼠标.触摸屏.游戏摇杆等设备只有输入没有输出,而且在编程实现其对应的驱动程序时会有很多重复性的代码,内核的设计者将该部分代码抽象出来,驱动工程师只需要复用该 ...
- background-position百分比原理
今天帮别人调代码时,看到一个样式: background-position: 50% 0;background-size: 100% auto: 对background-size:100% auto, ...
- 151008-JS初级完成,PHP入门(变量常量等)-没假放了
hi 今天是10月8号,你懂的,好困好困哒 上午搞定了JS的入门篇,真的是入门篇,基本都是JS做基本的输出.样式变化.惯例给出代码 <!DOCTYPE HTML><html>& ...
- Java Web之请求和响应
Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...
- cuda fft 计算
#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- 123——Appium Girls活动
有感于Ruby Girls和Python Girls,在15年就想组织一次移动测试的妹子活动,框架选择Appium, 从15年夏天开始准备,申请Google的会议室,招募教练,开放报名,审核报名,到正 ...
- HDU 5155 Harry And Magic Box --DP
题意:nxm的棋盘,要求每行每列至少放一个棋子的方法数. 解法:首先可以明确是DP,这种行和列的DP很多时候都要一行一行的推过去,即至少枚举此行和前一行. dp[i][j]表示前 i 行有 j 列都有 ...
- POJ1849Two[DP|树的直径](扩展HDU4003待办)
Two Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1390 Accepted: 701 Description Th ...