入门指南,入门例子

作者:计算机知识

在.net用简易方法塑造高并发、遍及式的大型应用程序框架。

Orleans 初接触(1) 入门例子,orleans入门

 【重回导航】

  在简练询问了Orleans 之后大家可以通过多少个例证去强化影像

Orleans 初接触,Orleans接触

Unity是微软Patterns & Practices团队所开采的三个轻量级的,并且可扩充的注重注入(Dependency Injection)容器,它帮衬常用的三种信赖注入格局:构造器注入(Constructor Injection)、属性注入(Property Injection),以及艺术调用注入(Method Call Injection).今后Unity最新的本子的1.二版,可以在微软的开源站点下载最新的发布版本和文书档案。通过选取Unity,大家能自在塑造松耦合结构的先后,从而让漫天程序框架变得一览无余和轻易维护。

原文:

一、Orleans入门例子

  这么些事例是跟着《Orleans入门例子》(

简介

  那篇小说重要记录了协和上学Orleans的经过和透亮,在上学进度中会一直更新,思路和通晓恐怕有一点偏颇,假诺有幸有大佬看到那篇小说,希望能给予切磋指正。

在平日的软件编码进程中,程序的逻辑往往很复杂,非常是大型项目标付出中,一个模块平时会去引用其余的模块,假设大家有二个督察器类,用来监督CPU的温度,当温度高达预先警告的限按时,监察和控制器有1个报告警察方的不二等秘书技,方法里面通过短信提示器,以发送短信的格局通报保卫安全人士。于是就应时而生了上边那样一段最为分布的代码:

在线文书档案:http://dotnet.github.io/orleans/What's-new-in-Orleans

  1.创建

  首先创制3个几个类型的消除方案,如图所示

  图片 1

  四个品种分别是:

  然后选拔NuGet引用Microsoft.Orleans.Server

  图片 2

  接着使用NuGet引用Microsoft.Orleans.Client

  图片 3

导航

(一) 入门例子

2.

3.

   1:  public class Monitor

   2:  {

   3:         public void Alarm()

   4:         {

   5:                 SMSNotify notify = new SMSNotify();

   6:                 notify.Send();

   7:          }

   8:  }

源码地址:

  2.编码

  IGrains.IBasic

  public interface IBasic : IGrainWithIntegerKey
    {
        Task<string> SayHello(string hellostr);
    }

  Grains.BasicGrain

  public class BasicGrain : Grain, IGrains.IBasic
    {
        public Task<string> SayHello(string hellostr)
        {
            Console.WriteLine("{0} : {1}", DateTime.Now.ToString("HH:mm:ss.fff"), hellostr);
            return Task.FromResult<string>("done");
        }
    }

入门指南,入门例子。  Host.Program

  class Program
    {
        static void Main(string[] args)
        {
            //获得一个配置实例
            //他需要两个端口,第一个端口2334是用来silo与silo之间的通信的,第二个1234是用于监听client的请求的
            var config = Orleans.Runtime.Configuration.ClusterConfiguration.LocalhostPrimarySilo(2234, 1234);
            //初始化一个silohost,这里使用了Orleans提供的silohost而不是silo,其中silo的名字命名为Ba;
            SiloHost siloHost = new SiloHost("Ba", config);
            //初始化仓储
            siloHost.InitializeOrleansSilo();
            //启动
            siloHost.StartOrleansSilo();

            //检查一下
            if (siloHost.IsStarted)
            {
                Console.WriteLine("silohost 启动成功");
            }
            else
            {
                Console.WriteLine("启动失败");
            }
            Console.ReadKey();
        }
    }

  

    class Program
    {
        static void Main(string[] args)
        {
            //等待服务端启动完毕
            Console.ReadKey();
            //然后我聪明的敲击了回车键
            Run();
            Console.ReadKey();
        }

        static async void Run()
        {
            //利用内置方法获得一个配置类,这个类指明服务端的端口是1234
            //可以利用配置文件,不过这里我就先用这个简单的配置类
            var config = Orleans.Runtime.Configuration.ClientConfiguration.LocalhostSilo(1234);

            //初始化一个GrainClient
            GrainClient.Initialize(config);

            //从silo处,获得了一个BasicGrain的接口
            IGrains.IBasic agrain = GrainClient.GrainFactory.GetGrain<IGrains.IBasic>(314);

            //调用里面的方法,等待它返回
            string result = await agrain.SayHello("还好");
            Console.WriteLine(result);
        }
    }

理解

  首先,Microsoft Orleans是在.net用简短方法营造高并发、布满式的巨型应用程序框架。

  官方文书档案以及源码:

  以下明白是学习了《Microsoft Orleans 之 入门指南》(

  Orleans 框架能够创设大规模、高并发、分布式应用程序,而没有须求学习标准遍布式以及并发知识框架。它是由微软商讨和布置性使用于云总结。被分布应用于微软云产品,而且微软官方游戏:哈尔o四、哈尔o5(光环|光晕)的云服务整个由它来承载,不少铺面在用它。

  特点:

    一.暗中认可的可拓展性,营造复杂的分布式应用程序,能够使您的程序轻便拓展到数百个服务。

    二.低延时,它能够让你的次序状态保存于内部存储器中,所以您的应用程序能够长足响应请求。

    三.简化并发,Orleans 允许你使用C#代码营造Actors 之间的异步管理音讯。

    注:(Actor模型是一个概念模型,用于拍卖并发总计。它定义了一四种系统组件应该怎样动作和互动的通用规则,一个Actor指的是1个最基本的计量单元。它能收到叁个音信还要依据其施行总计。具体的本人还不曾去深入学习,

    在Orleans,actors 被称作grains,选拔三个接口来代表,Actors的新闻用异步方法来接受,如下:

public interface IMyGrain : IGrainWithStringKey
{
    Task<string> SayHello(string name);
}

运行在Orleans 框架里的实现代码

public class MyGrain : IMyGrain
{
    public async Task<string> SayHello(string name)
    {
        return "Hello "   name;
    }
}

然后通过创建代理对象,并调用Grains的方法来发送消息

var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1");
await grain.SayHello("World");

  cluster:

    大批量的silos 同时在协同干活就形成了orleans的集群,orleans运行完全自动化的集群管理。

    全数silo都应用1个动态更新的共享成员存款和储蓄库,并促进和睦集群管理,通过翻阅共享存款和储蓄库明白对方的职责,在任曾几何时候,一个silo可以通过注册在共享存款和储蓄中再三再四到一个集群。

    这种格局的集群能够在运营时动态扩充。 Orleans 提供弹性和可用性从群聚焦删除无效的silos。

  Orleans 和客户端代码

    Orleans 包罗多个分歧的一些:Orleans 基础部分(grains) 和客户端部分

    Orleans 的壹有个别是由应用程序的运营时服务称silos grains 组成,在调解范围下的运转时实践的Grain代码和确定保证内部在Orleans 编制程序模型。

    客户端部分日常是1个web前端,通过少些的Orleans 客户端库连接到Orleans 部分,使得客户端代码能够通过引用服务端的三个grain的引用举办电视发表。

    举例:一个ASP.NET web应用程序运营在服务端的有的能够是Orleans 的客户端。 客户端部分运转在.net 应用程序池的主线程中,和不受调治的限定和Orleans 运维时的保管。

  Orleans 导入的包**

    Orleans 有八个必须的包Microsoft.Orleans.Server(服务端包)和Microsoft.Orleans.Client(客户端包)

    在NuGet里直接设置就行了,它会自行把任何重视的包也都设置上,vs正是那样便利,不过供给留意的是,不要任性去革新Orleans包所引用的其他包的版本,大概会促成有的奇离奇怪的错误(血的训诫)

  Orleans 有如何部分构成

    笔者大致的把Orleans分成了多少个部分

    IGrains : 这里放置全数Grains类要推而广之的接口。

    Grains  : 那么些里面达成全体IGrain载明的接口,实现全部的Grain类,包含它们的艺术以及字段。

    Host     : 那些里面纵使要运维Silo的。也正是服务端

    Client    : 那一个里面纵使要运转GrainClient的。它要和Host通讯,它正是客户端。

 

初接触,Orleans接触 简单介绍那篇随笔首要记录了和煦学习Orleans的经过和透亮,在求学进程中会一贯更新,思路和领会只怕有一点点偏颇,如...

在Monitor类中,直接引用到了二个短信提示器的类,那是最棒不灵便和最科学于扩张的一种艺术。大概大家想到了面向接口编制程序,利用多态的好处,能够提供灵活的例外子类的达成,扩大代码扩大性等等。可是到底,接口一定是索要达成的,也正是之类语句迟早要实践:

简单介绍:Orleans 框架能够营造大规模、高并发、布满式应用程序,而没有要求学习规范布满式以及并发知识框架。它是由微软切磋和规划使用于云总计。

  3.运行

  但是在运作Client的时候产生了一个主题材料

  图片 4

  还不领会怎么化解,就卡在那边了。

   1:  public void Alarm()

   2:  {

   3:         INotify notify = new SMSNotify();

   4:         notify.Send();

   5:  }

Orleans 被分布应用于微软云产品,值得注意的是微软官方游戏:哈尔o肆、哈尔o5(光环|光晕)的云服务整个由它来承载,以及更增添的信用社选用它。

  后续消除:

    在和讯赢得了博主大大的提醒,仔细检查之后,开掘原本是本身的host项目并未有引用引用Grains项目以及IGrains项目。在引用之后,整个项目就能够完整的运维下来了。

 

那样看来,在得以实现INotify那个接口的时候,还是须要具体的类来落到实处,而那样的代码在程序编写翻译的时候就已经牢固下来,假如之后要求运用新的提示器,仍然须要修改源代码一碗水端平新编写翻译。并且在大家的Monitor类中,显著依赖SMSNotify类,二者之间的耦合度极其紧密。因而Ioc(垄断(monopoly)反转)情势被提议用来消除这种难点,也即把接口的有血有肉落实延缓到运维时,接口的实现类是在运行时棉被服装载的。那样,纵然有了新的兑现类,也无需转移调用者的代码(可以在Unity中选择安顿文件的点子贯彻)。这种Ioc形式能够被形象的比如为:接口就像叁个空壳,而在切实可行落实时,向这么些空壳注入内容,而让它成为二个着实的实业。这种格局也被形象的称得上:正视注入。通过使用Unity,大家能创设松耦合的软件,并且对象之间互相关系的底细,大家也无须关切,能够交由依赖注入容器全权担任。

特征:一.暗中同意的可拓展性,营造复杂的布满式应用程序,能够使您的主次轻松拓展到数百个服务。

二、连忙入门示例

   那几个事例是接着《Microsoft Orleans 之 入门指南》(

眼前也波及了依据注入常用的三种样式:构造器注入、属性注入和格局调用注入,大家得以经过例子来完结那二种样式的流入。依然以下面的场景为例:

     二.低延时,它能够使您的主次状态保存于内存中,所以你的应用程序可以便捷响应请求。

  1.创建

  同样,是先创设三个多个类别的消除方案,这里把它取名称为OrleansSamples

  图片 5

  项目标结商谈上三个例证同样,同样是援引Microsoft.Orleans.Server(服务端包)和Microsoft.Orleans.Client(客户端包)

  不雷同的是其壹例子使用了和上2个例证不一样样的接口

 

   3.简化并发,Orleans 允许你使用C#代码构建Actors 之间的异步管理新闻。

  2.编码

  IUserService

    public interface IUserService : IGrainWithIntegerKey
    {
        Task<bool> Exist(string mobileNumber);
    }

  UserService

    public class UserService : Grain, IUserService
    {
        public Task<bool> Exist(string mobileNumber)
        {
            return Task.FromResult<bool>(mobileNumber == "15665699774");
        }
    }

  Server

    class Program
    {
        static void Main(string[] args)
        {
            using (var host = new SiloHost("Default"))
            {
                host.InitializeOrleansSilo();
                host.StartOrleansSilo();
                Console.WriteLine("启动成功!");
                Console.ReadLine();
                host.StopOrleansSilo();
            }
        }
    }

  Client

    class Program
    {
        static void Main(string[] args)
        {
            System.Threading.Thread.Sleep(15000);
            GrainClient.Initialize();

            while (true)
            {
                Console.WriteLine("请输入用户手机号:");
                var mobileNumber = Console.ReadLine();
                //这里由于我们采用的grain继承的是IGrainWithIntegerKey ,所以我们采用调用数值类型的key=10来创建这个grain,
                //可能有人会问key是干嘛的,他是唯一标识这个grain的,当你指定一个key的时候,Orleans 会创建一个,它首先到
                //你的存储介质中找(如果你配置了的话,默认采用内存存储,这种方式适合开发期,生产环境需要保持状态的,所以需要配置到能持久化存储的地方去,比如sqlserver等)
                //如果找到了就直接返回,如果没找到就根据你指定的这个key然后创建一个,这个就是grain的激活,具体详细的,可以看官方问的关于Grain一章。
                var userService = GrainClient.GrainFactory.GetGrain<IUserService>(10);
                //C#的一种新的表达式语法,这样就方便多了,省的我们拼接字符串。
                Console.WriteLine($"用户{mobileNumber},{(userService.Exist(mobileNumber).Result ? "已经存在" : "不存在")}");
            }

        }
    }

1.Constructor Injection

注:(Actor模型,请查看有名的Actor模型诗歌)

  3.运行

  想要将以此Orleans 运维起来,还索要做件事

  在Server目录下加多OrleansConfiguration.xml

<?xml version="1.0" encoding="utf-8" ?>
<OrleansConfiguration xmlns="urn:orleans">
  <Globals>
    <StorageProviders>
      <Provider Type="Orleans.Storage.MemoryStorage" Name="MemoryStore" />
      <Provider Type="Orleans.Storage.MemoryStorage" Name="Default" />
      <!--<Provider Type="Orleans.Storage.AzureTableStorage" Name="AzureStore"/>-->
    </StorageProviders>
    <SeedNode Address="localhost" Port="22222"/>
    <Messaging ResponseTimeout="30s"/>
  </Globals>
  <Defaults>
    <Networking Address="localhost" Port="22222"/>
    <ProxyingGateway Address="localhost" Port="40000" />
    <Tracing DefaultTraceLevel="Info" TraceToConsole="true" TraceToFile="{0}-{1}.log" PropagateActivityId="false" BulkMessageLimit="1000">
      <TraceLevelOverride LogPrefix="Application" TraceLevel="Info" />
      <!--
<TraceLevelOverride LogPrefix="Runtime.Dispatcher" TraceLevel="Verbose" />
<TraceLevelOverride LogPrefix="AssemblyLoader.Silo" TraceLevel="Warning" />
-->
    </Tracing>
    <Statistics MetricsTableWriteInterval="30s" PerfCounterWriteInterval="30s" LogWriteInterval="300s" WriteLogStatisticsToTable="true" StatisticsCollectionLevel="Info"/>
  </Defaults>
</OrleansConfiguration>

  在Client目录下增多ClientConfiguration.xml

<?xml version="1.0" encoding="utf-8" ?>
<ClientConfiguration xmlns="urn:orleans">
  <Gateway Address="localhost" Port="40000"/>
  <!-- To turn tracing off, set DefaultTraceLevel="Off" and have no overrides.
    For the trace log file name, {0} is replaced by "Client" and {1} is the current time. -->
  <Tracing DefaultTraceLevel="Info" TraceToConsole="false" TraceToFile="{0}-{1}.log" BulkMessageLimit="1000">
    <TraceLevelOverride LogPrefix="Runtime" TraceLevel="Info" />
    <TraceLevelOverride LogPrefix="Application" TraceLevel="Info" />
    <TraceLevelOverride LogPrefix="AssemblyLoader" TraceLevel="Warning" />
  </Tracing>
  <Statistics MetricsTableWriteInterval="300s" PerfCounterWriteInterval="30s" LogWriteInterval="300s" WriteLogStatisticsToTable="true" StatisticsCollectionLevel="Info"/>
  <Messaging ResponseTimeout="30s" ClientSenderBuckets="8192" MaxResendCount="0"/>
</ClientConfiguration>

  并且对那五个xml文件设置属性-高端-复制到输出目录-假使较新则复制

  将Server(服务端)和Client(客户端)分别运营后,就能够获得效果

  图片 6

  至此一个回顾的单服务的Orleans就早已做到了,从这么些事例里能简单的明亮一下Orleans。可是到底2个分布式的集群服务器应该怎么搭建,还是不要头绪,然大家继续上学西区

 

初接触(1) 入门例子,orleans入门 【重返导航】 在简易询问了Orleans之后大家能够透过多少个例证去强化影象一、Orleans入门例子 这一个...

IMonitor接口定义:

在Orleans,actors 被称作grains,采取3个接口来代表,Actors的消息用异步方法来接受,如下:

   1:  public interface IMonitor

   2:  {

   3:      void Alarm();

   4:  }
public interface IMyGrain : IGrainWithStringKey
{
    Task<string> SayHello(string name);
}

运行在Orleans 框架里的实现代码

public class MyGrain : IMyGrain
{
    public async Task<string> SayHello(string name)
    {
        return "Hello "   name;
    }
}

然后通过创建代理对象,并调用Grains的方法来发送消息

var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1");
await grain.SayHello("World");



接下来该做什么呢?
如果要学习更多关于Orleans的概念,请阅读 Orleans简介
如果要学习入门教程请学习 一步一步教程

Monitor类:

 

   1:  public class Monitor : IMonitor

   2:  {

   3:      private INotify notify;

   4:  

   5:      public Monitor(INotify n)

   6:      {

   7:          notify = n;

   8:      }

   9:  

  10:      public void Alarm()

  11:      {

  12:          notify.Send();

  13:      }

  14:  }

Microsoft Orleans 之 入门指南

INotify接口定义:

本文由bwin必赢发布,转载请注明来源

关键词: Unity 必赢娱乐网站