Git Product home page Git Product logo

dymdemo's Introduction

AnnoDemo

Anno 分布式开发框架 Demo

Java 实现 : https://github.com/duyanming/anno.thrift-parent

Demo 在线演示地址 :http://140.143.207.244

账号:anno
密码:123456

Anno 分布式开发框架

Anno 是一个分布式开发框架,同时支持 .net core3.0 、.net frameworker4.6.1。

1、运行Demo

第一步:启动注册中心
    进入项目文件夹 AnnoDemo\YY.AppCenter\bin\Debug\netcoreapp3.0 ,运行命令 dotnet AppCenter.dll
    看到下图 说明运行成功

第一步

第二步:启动Server  
    Server可以和 AppCenter 不在同一台电脑,也可以运行多个server 也可以负载均衡,高级用法随后介绍
    进入项目文件夹 AnnoDemo\YY.Server\bin\Debug\netcoreapp3.0 ,运行命令 dotnet YY.Server.dll
    看到下图 说明 Server 成功运行 并且已经注册到 注册中心(APPCenter)运行成功

第二步

第三步:启动Client
    启动Client 测试 Client调用 Server是否成功
    进入项目文件夹 AnnoDemo\YY.Client\bin\Debug\netcoreapp3.0 ,运行命令 dotnet YY.Client.dll
    看到下图 说明 Client 成功运行 

第三步

第三步:启动YYWeb

第四步

Anno EventBus

Eventbus Support  InMemory and Rabbitmq

1、Server配置

	//指定EventHandler的 所在程序集
	var funcs = Anno.Const.Assemblys.Dic.Values.ToList();
                #region RabbitMQEventBus
                //消费失败通知

                RabbitMQEventBus.Instance.ErrorNotice += (string exchange, string routingKey, Exception exception, string body) =>
                        {
                            Log.Fatal(new { exchange, routingKey, exception, body }, typeof(RabbitMQEventBus));
                        };
                EventBusSetting.Default.RabbitConfiguration = new RabbitConfiguration()
                {
                    HostName = "192.168.100.173",
                    VirtualHost = "dev",
                    UserName = "dev",
                    Password = "dev",
                    Port = 5672
                };
                RabbitMQEventBus.Instance.SubscribeAll(funcs);

                #endregion
                #region InMemory EventBus
                EventBus.Instance.ErrorNotice += (string exchange, string routingKey, Exception exception, string body) =>
                {
                    Log.Fatal(new { exchange, routingKey, exception, body }, typeof(EventBus));
                };
                EventBus.Instance.SubscribeAll(funcs);

2、EventData配置

	using Anno.EventBus;
	
	namespace Events
	{
	    public class FirstMessageEvent:EventData
	    {
	        public string Message { get; set; }
	    }
	}

3、EventHandler配置

	
	namespace Anno.Plugs.SamsundotService.EventHandler
	{
	    using Anno.EventBus;
	    using Events;
	
	    class FirstMessageEventHandler : IEventHandler<FirstMessageEvent>
	    {
	        public void Handler(FirstMessageEvent entity)
	        {
	            Log.Log.Info(new { Plugs= "Samsundot",Entity=entity },typeof(FirstMessageEventHandler));
	        }
	    }
	}
   
   namespace Anno.Plugs.YYTestService.EventHandler
   {
       using Anno.EventBus;
       using Events;
   
       class FirstMessageEventHandler : IEventHandler<FirstMessageEvent>
       {
           public void Handler(FirstMessageEvent entity)
           {
               Log.Log.Info(new { Plugs = "YYTest", Entity = entity }, typeof(FirstMessageEventHandler));
           }
       }
       /// <summary>
       /// 异常消费演示,测试 消费失败通知
       /// </summary>
       class FirstMessageExceptionEventHandler : IEventHandler<FirstMessageEvent>
       {
           public void Handler(FirstMessageEvent entity)
           {
               Log.Log.Info(new { Plugs = "YYTest",Handle= "FirstMessageExceptionEventHandler", Entity = entity }, typeof(FirstMessageEventHandler));
               throw new Exception("异常消费演示,测试 消费失败通知 From FirstMessageExceptionEventHandler!");
           }
       }
   }

4、中间件

4.1 缓存中间件

nuget install

Install-Package Anno.EngineData.Cache
   
using System;
using System.Collections.Generic;
using System.Text;
using Anno.EngineData;
using Anno.EngineData.Cache;


namespace Anno.Plugs.CacheRateLimitService
{
   public class CacheModule : BaseModule
   {
       /*
       参数1:缓存长度
       参数2:缓存存活时间
       参数3:缓存存活时间是否滑动
       */
       [CacheLRU(5,6,true)]
       public ActionResult Cache(string msg)
       {
           Console.WriteLine(msg);
           return new ActionResult(true, null,null,msg);
       }
   }
}

4.2 缓存中间件

nuget install

Install-Package Anno.EngineData.RateLimit
   
using System;
using System.Collections.Generic;
using System.Text;
using Anno.EngineData;
using Anno.RateLimit;

namespace Anno.Plugs.CacheRateLimitService
{
   public class LimitModule : BaseModule
   {
       /*
       参数1:限流算法是令牌桶还是漏桶
       参数2:限流时间片段单位秒
       参数3:单位时间可以通过的请求个数
       参数4:桶容量
       */
       [EngineData.Limit.RateLimit(LimitingType.TokenBucket,1,5,5)]
       public ActionResult Limit(string msg)
       {
           Console.WriteLine(msg);
           return new ActionResult(true, null, null, msg);
       }
   }
}

dymdemo's People

Contributors

duruoyi avatar duyanming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.