private void CreateDocumentOnEachNode(SubscriptionMessage subscription) { foreach (var member in cluster.ReadView.Members) { var props = Props.Create( () => new EventSubscribingAtomDocumentActor(new AtomDocumentSettings())); var nameOfActorToDeployOnNode = $"atomActor_{member.Address.GetHashCode()}_{subscriptionMessage.SubscriptionId.Id}"; LogTraceInfo($"About to deploy actor with name {nameOfActorToDeployOnNode} onto node {member.Address}"); var atomDocument = Context.ActorOf( props .WithDeploy( new Deploy( new RemoteScope(member.Address))), nameOfActorToDeployOnNode); atomDocument.Tell( new CreateAtomDocumentCommand( "", "", headDocumentIdForFeed, Context.Self)); documentActors.Add(atomDocument); LogTraceInfo($"Subscription Actor deployed with address {atomDocument.Path} "); } }
public HttpResponseMessage Put(SubscribeMessage subscribeMessage) { var subscriptionMessage = new SubscriptionMessage(new AtomNotificationChannel(), new SubscriptionId(subscribeMessage.SubscriptionId), new AllEventMatcher()); eventShardedSubscriber.CreateSubscription(subscriptionMessage); var response = new HttpResponseMessage(HttpStatusCode.Accepted); response.Content = new StringContent(JsonConvert.SerializeObject(string.Empty, jsonSerializerSettings), Encoding.UTF8, "application/vnd.tesco.eventSubscription+json"); return response; }
public static void Main(string[] args) { var akkaSystemName = GetValueFromCommandLine("akkaSystemName", args); var seedNodes = GetValueFromCommandLine("seedNodes", args); var akkaPortNumber = GetIntFromCommandLine(args, "portNumber"); var entriesPerDocument = GetIntFromCommandLine(args, "entriesPerDocument"); var persistence = GetValueFromCommandLine("persistence", args); var eventSystemHost = new BurstingEventSystemHost(akkaPortNumber, akkaSystemName, persistence, seedNodes, 3601, entriesPerDocument); var EventRaisingController = eventSystemHost.Get<EventRaisingController>(); eventSystemHost.Start(); Console.Title = string.Join(" ", args); Thread.Sleep(TimeSpan.FromSeconds(5)); var subscriptionId = new SubscriptionId(GetValueFromCommandLine("subscriptionId", args)); if (!string.IsNullOrEmpty(subscriptionId.Id)) { Console.WriteLine("Getting subscriptionId"); ISubscriptionManager shardedSubscriptionManager = eventSystemHost.Get<ISubscriptionManager>(); var currentSubscription = shardedSubscriptionManager.GetSubscriptionDetails(new SubscriptionQuery(subscriptionId)).Result; if (currentSubscription is NullSubscription) { _subscriptionMessage = new SubscriptionMessage( new AtomNotificationChannel(), subscriptionId, new AllEventMatcher()); shardedSubscriptionManager.CreateSubscription(_subscriptionMessage); Thread.Sleep(1000); } Thread.Sleep(1000); IEventPublisher notifier = eventSystemHost.Get<IEventPublisher>(); var i = 0; while (true) { notifier.PublishMessage(new DummyDomainEvent(akkaPortNumber + ":" + (++i).ToString())); LogManager.GetLogger("").Info("Raising event with id" + i); } } while (true) { Thread.Sleep(TimeSpan.FromSeconds(5)); } }
public async Task CreateANewSubscriptionIfTheSubscriptionDoesntExist() { var subscriptionMessage = new SubscriptionMessage( new LocalEventNotificationChannel(), new SubscriptionId(Guid.NewGuid().ToString()), new AllEventMatcher()); _shardedSubscriptionManager.CreateSubscription(subscriptionMessage); var queryMessage = new SubscriptionQuery(subscriptionMessage.SubscriptionId); var result = await _shardedSubscriptionManager.GetSubscriptionDetails(queryMessage); Assert.AreEqual(subscriptionMessage, result); }
private void Process(SubscriptionMessage subscription) { LoggingAdapter.Debug("Creating a subscription with id " + subscription.SubscriptionId.Id); if (subscriptionMessage != null) { LoggingAdapter.Debug("Dumping out of subscription for " + subscription.SubscriptionId.Id + " as subscription Id wasn't null "); return; } LoggingAdapter.Debug("Creating docs for " + subscription.SubscriptionId.Id); var notifier = notifierFactory.GetNotifierFor(subscription.NotificationChannel.GetType()); notifier.Create(subscription); LoggingAdapter.Debug("Persisting " + subscription.SubscriptionId.Id); Persist(subscription, MutateInternalState); }
private void CreateFeedActor(SubscriptionMessage subscription) { LogTraceInfo($"Creating atom subscription actor"); CreateDocumentOnEachNode(subscription); LogTraceInfo("Created atom subscription actor"); }
private void Process(SubscriptionMessage subscription) { Persist(subscription, MutateInternalState); }
private void MutateInternalState(SubscriptionMessage subscription) { this.subscriptionMessage = subscription; headDocumentIdForFeed = new DocumentId(subscription.SubscriptionId.Id, 0); CreateFeedActor(subscription); }
public void Create(SubscriptionMessage message) { }
public void Notify(SubscriptionMessage message, DomainEvent eventToNotify) { EventNotifiedWith = eventToNotify; EventReceived.Set(); }
public void CreateSubscription(SubscriptionMessage subscriptionMessage) { SubscriptionActorRef.Tell(subscriptionMessage); }
private void MutateInternalState(SubscriptionMessage message) { this.subscriptionMessage = message; LoggingAdapter.Debug("Persist finished " + subscriptionMessage.SubscriptionId.Id); SubscribeToClusterWideBroadcastDomainEvent(); }
public void Create(SubscriptionMessage message) { factory.GetActorRef().Tell(new AtomFeedCreationCommand("Title", "Author", new FeedId(message.SubscriptionId.Id), null)); }
public void Notify(SubscriptionMessage message, DomainEvent eventToNotify) { factory.GetActorRef().Tell(new EventWithSubscriptionNotificationMessage(message.SubscriptionId, eventToNotify)); }