示例#1
0
        public OrleansPubSub(IGrainFactory grainFactory)
        {
            Guard.NotNull(grainFactory, nameof(grainFactory));

            this.grainFactory = grainFactory;

            pubSubGrain = grainFactory.GetGrain <IPubSubGrain>(SingleGrain.Id);
        }
示例#2
0
 public Task Unregister(IPubSubGrain grainSubscriber)
 {
     if (!this.subscribers.Contains(grainSubscriber))
     {
         this.subscribers.Remove(grainSubscriber);
     }
     var y = subscribers.ToArray();
     return Task.WhenAll(this.subscribers.Select(x => x.TopologyChange(y)).ToArray());
 }
示例#3
0
        public Task Unregister(IPubSubGrain grainSubscriber)
        {
            if (!this.subscribers.Contains(grainSubscriber))
            {
                this.subscribers.Remove(grainSubscriber);
            }
            var y = subscribers.ToArray();

            return(Task.WhenAll(this.subscribers.Select(x => x.TopologyChange(y)).ToArray()));
        }
示例#4
0
 public async Task<IPubSubGrain[]> Register(IPubSubGrain grainSubscriber)
 {
     if (!this.subscribers.Contains(grainSubscriber))
     {
         this.subscribers.Add(grainSubscriber);
     }
     var y = subscribers.ToArray();
     await Task.WhenAll(this.subscribers.Where(x => x != grainSubscriber).Select(x => x.TopologyChange(y)).ToArray());
     return y;
 }
示例#5
0
        public async Task <IPubSubGrain[]> Register(IPubSubGrain grainSubscriber)
        {
            if (!this.subscribers.Contains(grainSubscriber))
            {
                this.subscribers.Add(grainSubscriber);
            }
            var y = subscribers.ToArray();
            await Task.WhenAll(this.subscribers.Where(x => x != grainSubscriber).Select(x => x.TopologyChange(y)).ToArray());

            return(y);
        }
示例#6
0
        public OrleansMessageBus(IDependencyResolver resolver, ScaleoutConfiguration configuration)
            : base(resolver, configuration)
        {
            grain = PubSubGrainFactory.GetGrain(Guid.NewGuid());

            subscriber = new MessageObserver((messages) =>
            {
                lock (grain)
                {
                    OnReceived(messages[0].StreamIndex, messages.Select(x => x.MappingId).Max(), new ScaleoutMessage(messages));
                }
            });
            subscriberReference = MessageObserverFactory.CreateObjectReference(subscriber).Result;
            grain.Subscribe(subscriberReference).Wait();
        }
示例#7
0
        public OrleansMessageBus(IDependencyResolver resolver, ScaleoutConfiguration configuration)
            : base(resolver, configuration)
        {
            grain = PubSubGrainFactory.GetGrain(Guid.NewGuid());

            subscriber = new MessageObserver((messages) =>
            {
                lock (grain)
                {
                    OnReceived(messages[0].StreamIndex, messages.Select(x => x.MappingId).Max(), new ScaleoutMessage(messages));
                }
            });
            subscriberReference = MessageObserverFactory.CreateObjectReference(subscriber).Result;
            grain.Subscribe(subscriberReference).Wait();
        }
示例#8
0
 public Task TopologyChange(IPubSubGrain[] otherGrains)
 {
     this.otherGrains = otherGrains;
     return TaskDone.Done;
 }
 public override Task OnActivateAsync()
 {
     pubSub = GrainFactory.GetGrain <IPubSubGrain>("pubsub-" + this.GetGrainIdentity().PrimaryKeyString);
     pubSub.SetPublishingGrain(typeof(IContentPersistentGrain), this.GetGrainIdentity().PrimaryKeyString);
     return(base.OnActivateAsync());
 }