网上对于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. find + xargs + cp 遇到文件名中带空格如何处理

    一,需求为查询文件名为ZRSH开头的时间为7月至今的所有文件并打包 1.首先想到的就是find + xargs + cp  格式.. find 2016073* -type f  -name *ZRS ...

  2. 解析JSON的两种方法eval()和JSON.parse()

    解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...

  3. Python爬虫——爬豆瓣登录页面

    直接上代码 import urllib.request import http.cookiejar from lxml import etree # from spiderImg import get ...

  4. php中const与define的区别

    1 版本差异: const 要求php的版本>5.3.0 define 可以兼容php4,php5 等版本 2 定义的位置区别: const关键字定义的常量是在编译时定义的,因此const关键字 ...

  5. 面向对象 初级版 (Preview) 未完

    概述: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数里,日后使用无需重复编写,直接调用韩顺即可. 面向对象: 对函数进行分类和封装,让开发'更快更强' 面向对象和面向过程的通 ...

  6. robotframework的学习笔记(十四)------学习Robot Framework必须掌握的库—-BuiltIn库

    作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...

  7. java 连接 postgresql

    最近公司用postgresql这个数据库,看网上说这个数据库还算好用,自己就用了一下,我就是用java连接了一下数据库. 其实每个数据库的连接方式大致相同,只是用到的驱动不同,用不同数据库只需要换不同 ...

  8. 嵌入式linux下wifi网卡的使用(二)——应用程序iw编译

    首先编译iw,Iw支持两种加密/认证方式.第一种是OPEN/OPEN 第二种是WEP/WEP在网上下载iw源码,发现iw的编译需要依赖libnl库(这个库是为了方便应用程序使用netlink借口而开发 ...

  9. gitlab勾住rocket chat

    出于协作的要求, 需要在把gitlab的push event勾到rocket chat上面, 通知协作的其他人. BUT rocket chat提供的脚本没有具体的文件diff, so, 只好修改一下 ...

  10. BinderPool — Andorid端的“服务发现治理工具”

    导语 最近在学习微服务相关知识,突然想到:微服务的思想虽然是在server端的场景下提出来的,但是无论是server,还是移动端,思想是相通的,移动端也会有多服务的场景,就同样面临多服务需要整合治理的 ...