网上对于java有很多开源的组件可以搭建分布式日志系统,我参考一些组件自己开发一套简单的分布式日志系

全部使用采用.NET进行开发,所用技术:MVC、EF、RabbitMq、MySql、Autofac

整体构架如下:

主要采用的RabbitMq进行处理,下面我主要讲讲.NET下运用RabbitMq

1.RabbitMQ Erlang 的安装,网上很多介绍,我这里就不多少了,请参考https://jingyan.baidu.com/article/a17d5285173ce68098c8f2e5.html

备注:安装好后一定注意保持.erlang.cookie这个文件的一致,在用户目录和windows下面。

2.RabbitMQ是使用,先安装RabbitMQ.Client,在VS中程序管理装入

RabbitMQ的辅助类

/// <summary>
/// RabbitMQ消息队列处理
/// </summary>
public class RabbitMQHelper
{
/// <summary>
/// rabbitMQ地址
/// </summary>
private string HostName = "localhost"; //ConfigurationManager.AppSettings["RabbitMQHostName"];
/// <summary>
/// 账号
/// </summary>
private string UserName = "guest"; //ConfigurationManager.AppSettings["RabbitMQUserName"];
/// <summary>
/// 密码
/// </summary>
private string Password = "guest"; // ConfigurationManager.AppSettings["RabbitMQPassword"];
/// <summary>
/// 创建ConnectionFactory
/// </summary>
/// <returns></returns>
private ConnectionFactory factory { get; set; } public RabbitMQHelper() {
if (factory == null)
{
factory = new ConnectionFactory();
factory.HostName = HostName;
factory.UserName = UserName;
factory.Password = Password;
}
}
public RabbitMQHelper(string UserName,string Password):base() {
this.UserName = UserName;
this.Password = Password;
}
public RabbitMQHelper(string UserName, string Password,string HostName) :base() {
this.UserName = UserName;
this.Password = Password;
this.HostName = HostName;
}
/// <summary>
/// 消息发送
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="entity"></param>
/// <param name="MqName"></param>
public void SendMsg<TEntity>(TEntity entity,string MqName)
{
if (entity == null || string.IsNullOrEmpty(MqName)) return;
using (var connection = factory.CreateConnection()) {
using (var channel = connection.CreateModel()) {
bool durable = true;
channel.QueueDeclare(MqName, durable, false, false, null);
string message = Newtonsoft.Json.JsonConvert.SerializeObject(entity);
//持久化队列消息
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", MqName, properties, body); }
}
}
/// <summary>
/// 接受消息
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="MqName"></param>
/// <param name="entity"></param>
/// <param name="action"></param>
public void AcceptMsg<TEntity>(string MqName,out TEntity entity,Action action)where TEntity:class
{
entity =null;
if (string.IsNullOrEmpty(MqName)) return;
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
bool durable = true;
channel.QueueDeclare(MqName, durable, false, false, null);
//公平分发
channel.BasicQos(, , false);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume(MqName, false, consumer);
while (true)
{
var ea = consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
entity = Newtonsoft.Json.JsonConvert.DeserializeObject<TEntity>(message);
Thread.Sleep();
channel.BasicAck(ea.DeliveryTag, false);
action();
}
}
}
} }

3.在生成服务器只需要调用SendMsg将日志文件写入消息队列

4.在日志处理服务器采用 NLog进行日志持久化处理,目前采用2台服务,采用RabbitMQ公平分发到2台日志服务器中,最后进行持久化处理,NLog的使用这里就不作说明

如果对于日志处理有更好的方案欢迎指出,谢谢

C#采用rabbitMQ搭建分布式日志系统的更多相关文章

  1. 教你一步搭建Flume分布式日志系统

    在前篇几十条业务线日志系统如何收集处理?中已经介绍了Flume的众多应用场景,那此篇中先介绍如何搭建单机版日志系统. 环境 CentOS7.0 Java1.8 下载 官网下载 http://flume ...

  2. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐

    http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于S ...

  3. ELK +Nlog 分布式日志系统的搭建 For Windows

    前言 我们为啥需要全文搜索 首先,我们来列举一下关系型数据库中的几种模糊查询 MySql : 一般情况下LIKE 模糊查询  SELECT * FROM `LhzxUsers` WHERE UserN ...

  4. PowerJob 在线日志饱受好评的秘诀:小但实用的分布式日志系统

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 项目地址: https://github.com/ ...

  5. Ansible实战:部署分布式日志系统

    本节内容: 背景 分布式日志系统架构图 创建和使用roles JDK 7 role JDK 8 role Zookeeper role Kafka role Elasticsearch role My ...

  6. ASP.NET Core分布式日志系统ELK实战演练

    一.ELK简介  ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. •  Elastics ...

  7. 从头开始搭建分布式日志平台的docker环境

    上篇(spring mvc+ELK从头开始搭建日志平台)分享了从头开始搭建基于spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平 ...

  8. HAProxy + Keepalived + Flume 构建高性能高可用分布式日志系统

    一.HAProxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...

  9. 微服务-分布式日志系统Logstash部署

    参考资料: 1 .Logstash中文官网 2. 阿里云Elasticsearch> 最佳实践 > logstash部署 3. logstash.elasticsearch.kibana搭 ...

随机推荐

  1. ElasticSearch 学习记录之ES高亮搜索

    高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...

  2. JDK8.0新特性

    连接转载地址:http://www.2cto.com/kf/201609/544044.html Eclipse: http://aiyiupload.oss-cn-beijing.aliyuncs. ...

  3. 用python爬整本小说写入txt文件

    没太完善,但是可以爬下整本小说.日后会写入数据库,注释不要太在意,都是调试的.入库估计这周之后,这次爬的是笔趣阁的第1150本书,大家只要可以改get_txt()里数字就行,查到自己要看哪本书一改就可 ...

  4. Xamarin.Android 使用Timer 并更改UI

    http://blog.csdn.net/ozhangsan12345/article/details/72653070 第一步:创建timer对象 //创建timer对象 Timer _dispat ...

  5. asp.net core webapi 服务端配置跨域

    在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加 ...

  6. Nginx 学习笔记(七)如何解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

    出现:nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) 错误,有以下两种情况 1.80端口被占用 2.ipv4端 ...

  7. celery出现警告或异常的解决方式

    做个笔记,记录下使用celery踩过的坑,不定期更新.  warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) 我用的是Flask,所以在Fl ...

  8. Netty对WebSocket的支持(五)

    Netty对WebSocket的支持(五) 一.WebSocket简介 在Http1.0和Http1.1协议中,我们要实现服务端主动的发送消息到网页或者APP上,是比较困难的,尤其是现在IM(即时通信 ...

  9. linux网路编程:字节序(大端、小端、网络、主机)

    字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...

  10. Nginx集群之SSL证书的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi身份验证... 1 3       AuthorizeAttribute类... 2 4       ...