网上对于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. php 理解

    <?php class t { var $num; var $dynamic_function; public function dynamic_function() { $func = $th ...

  2. CSS图片翻转动画技术详解

    因为不断有人问我,现在我补充一下:IE是支持这种技术的!尽管会很麻烦.需要做的是旋转front和back元素,而不是旋转整个容器元素.如果你使用的是最新版的IE,可以忽略这一节.IE10+是支持的,I ...

  3. 在Maven Central发布中文API的Java库

    原址: https://zhuanlan.zhihu.com/p/28024364 相关问题: 哪些Java库有中文命名的API? 且记下随想. 之前没有发布过, 看了SO上的推荐:Publish a ...

  4. linux svn up 中文显示乱码解决办法

    vi /etc/sysconfig/i18n #LANG="en_US.UTF-8" #LANG=zh_CN.GB18030 #LC_ALL=zh_CN.GB18030 #SYSF ...

  5. Java中使用LocalDate根据日期来计算年龄

    Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat ...

  6. TensorFlow常用的函数

    TensorFlow中维护的集合列表 在一个计算图中,可以通过集合(collection)来管理不同类别的资源.比如通过 tf.add_to_collection 函数可以将资源加入一个 或多个集合中 ...

  7. (class file version 53.0), Java Runtime versions up to 52.0错误的解决方法

    遇到这个错误是在Apache Tomcat上部署应用程序的时候遇到的,具体的错误描述是: java.lang.UnsupportedClassVersionError: HelloWorld has ...

  8. [js高手之路]从零开始打造一个javascript开源框架gdom与插件开发免费视频教程连载中

    百度网盘下载地址:https://pan.baidu.com/s/1kULNXOF 优酷土豆观看地址:http://v.youku.com/v_show/id_XMzAwNTY2MTE0MA==.ht ...

  9. JS中闭包、函数与对象的介绍和用法

    闭包 闭包概念:当一个内部函数被调用,就会形成闭包,闭包就是能够读取其他函数内部变量的函数,定义在一个函数内部的函,创建一个闭包环境,让返回的这个子程序抓住i,以便在后续执行时可以保持对这个i的引用. ...

  10. 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据

    这一节我们来说一下如何用ajax提交请求? 我们先不讲ajax的原理,还是先以实战为主,看一下这个东西到底怎么用的? form表单: <!-- 采用post表单提交 --> <for ...