澳门美高梅手机网站LindDotNetCore~基于模块化注入的介绍

有关模块

  1. 全局都是倚重DI
  2. 音讯队列
  3. NoSql
  4. Caching
  5. 仓储
  6. 服务总线
  7. Solr
  8. 调度
  9. 日志
  10. Asspect拦截组件
  11. UAA授权
  12. 各样零件环境的搭建
  13. 各模块单元测试编写

    #### DI统第一次大战线

    LindDotNet框架同样拔取了大局DI注入的章程来采纳模块对象的,这种松耦合的筹划对于单元测试
    是很方便人。

    services.AddLog4Logger(o =>
    {
    o.Log4ConfigFileName = "log4.config";
    o.ProjectName = "test";
    });
    services.UseDapper(o =>
    {
    o.ConnString = $"Data Source=/Data/intergratetest.db";
    o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
    });
    

    #### 信息队列

    音信队列紧要选择’rabbitmq,kafka’实现的,用来解耦项目,处理高并发任务和耗时任务,生产者
    不需要关怀是谁来消费,它只管把信息发到队列中;而顾客不珍视音信咋样暴发,只把消费按着
    作业逻辑去处理掉!

    services.AddRabbitMQ(o =>
    {
    o.ExchangeName = "zzl";
    o.MqServerHost = "192.168.200.214";
    o.VirtualHost = "/";
    o.ExchangeType = "topic";
    });
    

    #### NoSql

    脚下框架的NoSql部分由redis和mongodb组成,之具备接纳这二种框架最大的原故就是它们覆盖了
    NoSql所有的使用状况,像redis用来储存k/v键值对,帮助5大数据结构;而mongodb用来储存文档
    型数码,帮助复杂的查询,嵌套查询等。

    services.AddRedis(o =>
    {
    o.Host = "localhost:6379";
    o.AuthPassword = "";
    o.IsSentinel = 1;
    o.ServiceName = "mymaster";
    o.Proxy = 0;
    });
    

    #### Caching

    多少缓存是相比较紧要的一对,用来储存一些热数据,近年来分布式环境使用redis,单机能够间接行使
    运作时缓存。

    services.AddRuntimeCache(o =>
    {
    o.CacheKey = "lindCache";
    o.ExpireMinutes = 5;
    });
    

    #### 仓储

    存储首要简化数据持久化的操作,对外提供简单的CURD操作接口,使用者直接调用即可,不需要干预SQL语句,
    从这一点上的话,开发效能确实提升了很多。最近五叔框架里集成了ef,dapper,mongodb,redis,elastic等仓储,其中
    EF和Dapper可以操作sqlserver,mysql,sqllite等数据库。

    services.UseDapper(o =>
    {
    o.ConnString = $"Data Source={Directory.GetCurrentDirectory()}/intergratetest.db";
    o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
    });
    

    #### 服务总线

    服务总线重倘若用来解耦项目标层与层之间的调用,让程序员把关注点放在工作上,如今框架提供了IOC形式的轩然大波,
    按照简单内存字典存储的轩然大波等。

    services.AddIocBus();
    services.AddInMemoryBus();
    

    #### Solr

    Solr是在Lucene基本功在此之前开发的,使用java编写,一般配备在tomcat上,有协调的图像管理界面,可以用来保管core,
    相似地,我们在筹划一个core时,需要为它白手起家相应的实业,与它的core里的性能对应起来;solr有增长的插件,像有些
    闽南语分词包,索引包等。

    services.AddSolrNet(o =>
    {
    o.ServerUrl = "http://192.168.200.214:8081/solr/system_companysubject";
    o.UserName = "sa";
    o.Password = "sa";
    });
    

    #### 调度服务

    调度服务是以quartz为要旨,并对它的意义拓展了打包,援助实时添加的任务,这点利用了windows/linux的目录监控事件
    ,也是.netcore帮我们兑现的,大家只需要订阅相关事件即可。

    var watcher = new FileSystemWatcher
    {
    Path = AppDomain.CurrentDomain.BaseDirectory,
    NotifyFilter = NotifyFilters.Attributes |
                   NotifyFilters.CreationTime |
                   NotifyFilters.DirectoryName |
                   NotifyFilters.FileName |
                   NotifyFilters.LastAccess |
                   NotifyFilters.LastWrite |
                   NotifyFilters.Security |
                   NotifyFilters.Size,
    Filter = "*.dll"
    };
    // quartz运行时,可以添加新job,但不能覆盖,删除等
    watcher.Created += new FileSystemEventHandler((o, e) =>
    {
    foreach (var module in Assembly.LoadFile(e.FullPath).GetModules())
    {
        foreach (var type in module.GetTypes().Where(i => typeof(ISchedulingJob).IsAssignableFrom(i)))
        {
            JoinToQuartz(type, DateTimeOffset.Now);
        }
    }
    });
    //Start monitoring.
    watcher.EnableRaisingEvents = true;
    

    #### 日志

    日志框架与事先的Lind框架里日志差距不大,只是把目的的生命周期移到了DI容器去联合保管,都施用单例形式,目前日记框架提供了
    对log4net的支撑,同时轻量级日志可以利用lindlogger来实现。

    services.AddLog4Logger(o =>
    {
    o.Log4ConfigFileName = "log4.config";
    o.ProjectName = "test";
    });
    

    #### Asspect拦截组件

    形式阻碍在微软mvc,api框架里采纳非凡宽广,可以在措施执行前与执行后动态增长全套逻辑,而不需要关注方法细节,实现拦阻行为
    的开发人士不需要去关爱方法细节,这利用了面向对象的封装特性,而也契合开闭原则,因为您可以在不修改原来代码的动静下,动态
    为它丰裕行为。

    [Fact]
    public void FuncInvoke()
    {
    var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
    Assert.Equal("OK", obj.GetHello());
    }
    [Fact]
    public void ActionInvoke()
    {
    var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
    obj.SetHello();
    Assert.Equal(1, 1);
    }
    

    待续…
    回去目录

   在/conf文件夹新建两个布局文件,zoo1.cfg,zoo2.cfg以及zoo3.cfg

LindDotNetCore相关介绍

syncLimit=2

回来目录

 可以指定放在哪个目录,如usr/local

 tar zxvf zookeeper-3.4.6.tar.gz

参数表达

二、独立布置安排

     zookeeper-3.4.6-node3

 

server.2=10.10.0.102:2888:3888

若果在同一个索引下成立3 个不同配置文件,则用下边方法

server.3=10.10.0.103:2888:3888

    2n+1,和事先的集群部署格局相同,比如我们这边用3台

2、编写配置文件

内容为1,2,3 对应server序号,如:1,2,3

      zookeeper-3.4.6-node2

 1、编辑zookeeper-3.4.6/conf 下的zoo_sample.cfg文件,
这些文件之中配备了监听客户端连接的端口等片段音讯,Zookeeper
在启动时会找zoo.cfg那个文件作为默认配置文件。

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它首假如用来解决分布式应用中不时遭逢的一部分数额管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的军事管制等。要旨词就是一个,协调。

dataDir=/var/zookeeper/

tickTime=2000

wget -c
http://www.eu.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

tickTime=2000

若分别四个目录,则在分别目录下举办,./zkServer.sh start

server.1=localhost:2887:3887

  1、ZooKeeper的集群格局下,五个Zookeeper服务器在办事前会选举出一个Leader,在接下去的干活中这多少个被选举出来的Leader死了,而剩余的Zookeeper服务器会了然这么些Leader死掉了, 
在活着的Zookeeper集群中会继续选出一个Leader,选举出Leader的目标是为着可以在分布式的条件中保证数据的一致性。 由于ZooKeeper集群中,会有一个Leader负责管理和协调其他集群服务器,由此服务器的多少平日都是单数,例如3,5,7…等,那样2n+1的数据的服务器就可以允许最多n台服务器的失灵。

./zkServer.sh start zoo2.cfg

若配置正常,启动后结果如下

    ./zkServer.sh start

syncLimit:那多少个布局项标识 Leader 与 Follower 之间发送信息,请求和回答时间长度,最长不可能领先多少个 tick提姆(Tim)e 的日子长短,总的时间长度就是 2*2000=4 秒 

./zkServer.sh start zoo1.cfg

clientPort=2181

initLimit=5

   除了修改 zoo.cfg 配置文件,集群形式下还要配置一个文件 myid,这么些文件在dataDir 目录下,这几个文件之中就只有一个数码就是A
(服务器对应的数码)
的值,Zookeeper 启动时会读取这么些文件,得到内部的多寡与 zoo.cfg 里面的配备信息比较从而判断究竟是万分 server。

server.2=localhost:2888:3888

tickTime=2000

1、确认集群伪服务器的数码

  因条件限制,这里以伪集群格局配置运行

2、在zookeeper-3.4.6/bin目录启动Zookeeper服务:

4、执行运行脚本

clientPort=2181

     分别部署conf下zoo.cfg文件

initLimit:配置 Zookeeper 接受客户端(指的是 Zookeeper 服务器集群中老是到 Leader 的 Follower 服务器)最先化连接时最长能经受多少个心跳时间间隔数。集群包含多台server,
其中一台为leader,
集群中其他的server为follower,follower和leader之间的最长心跳时间,如该参数设置为5,当已经超越 5 个心跳时间(即 tick提姆(Tim)e),总时间长短是 5*2000=10 秒后 Zookeeper 服务器并未接受客户端的回来音信,那么讲明那个客户端连接失败。

tick提姆e:这几个刻钟是用作 Zookeeper
服务器之间或客户端与服务器之间维持心跳的时日距离,也就是每个 tick提姆(Tim)e
时间就会发送一个心跳

 

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,ZooKeeper是以Fast Paxos算法为底蕴,实现协同服务,配置维护和命名服务等分布式应用。

3.在每个zookeeper-3.4.6-node独家成立myid文件

server.1=localhost:2887:3887

server.1=10.10.0.101:2888:3888

dataDir=/usr/local/zookeeper-3.4.6-node3

 

./zkServer.sh start zoo3.cfg

     在zookeeper-3.4.6/conf目录下复制一个名号为zoo.cfg的文件:

server.3=localhost:2889:3889

initLimit=10

  或  将zookeeper-3.4.6 对应目录复制三份

澳门美高梅手机网站 1

三、ZooKeeper集群部署安排

server.1=localhost:2887:3887

    ./zkServer.sh start

clientPort:这些端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper
会监听这些端口,接受客户端的造访请求。

四、伪集群格局安排部署

 

# Filename zoo.cfg

syncLimit=5

server.3=localhost:2889:3889

下面实践安装来上学下,分为独立布置、集群部署

clientPort=2182

 

2、编写配置文件

initLimit=10

 

 

server.2=localhost:2888:3888

 mkdir  /usr/local/zookeeper-3.4.6

server.A=B:C:D:其中 A 是一个数字,表示那一个是第几号服务器;B 是以此服务器的 ip 地址;C 代表的是那些服务器与集群中的 Leader 服务器交流音讯的端口;D 表示的是只要集群中的 Leader 服务器挂了,需要一个端口来再一次开展选举,选出一个新的 Leader,而那么些端口就是用来执行选举时服务器相互通信的端口。如如果伪集群的配备模式,由于 B 都是一致,所以不同的 Zookeeper 实例通信端口号不可以同一,所以要给它们分配不同的端口号

syncLimit=5

 那样才能使得所有集群启动起来。

dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认意况下,Zookeeper
将写多少的日记文件也保留在这多少个目录里

  如zookeeper-3.4.6-node1

clientPort=2183

dataDir=/usr/local/zookeeper-3.4.6-node2

 

澳门美高梅手机网站 2

zookeeper-3.4.6-node3

zookeeper-3.4.6-node2

4、

 澳门美高梅手机网站 3

server.3=localhost:2889:3889

部署文件需要在每台服务器中都要编制,以下是一个布置文件的样书:

 

dataDir=/usr/local/zookeeper-3.4.6-node1

   
和单机格局下的周转形式基本相同,需要注意的地点就是要分别在不同服务器上推行五遍,例如分别在101,102,103上运行:

启动zookeeper 服务

syncLimit=5

一、下载安装

5、分别启动

若没安排好则会油但是生这么些特别

zookeeper-3.4.6-node1

      cp zoo_sample.cfg zoo.cfg

3、创建myid文件

initLimit=10

JMX enabled by default Using config:
/var/local/server/zookeeper/bin/../conf/zoo.cfg Error
contacting service. It is probably not
running.

出于多少个服务都在一如既往台微机上,因而这里要保管地址的唯一性,由此要特别注意IP地址和端口号不要互相争辩,IP相同,端口一定无法一如既往,以免影响程序的正确履行。

 

tickTime=2000

server.2=localhost:2888:3888

发表评论

电子邮件地址不会被公开。 必填项已用*标注