Example #1
0
        public void CanSubscribe()
        {
            var sut = new Bus();
            ISubscriptionTag tag = sut.Subscribe <DoSomethingCommand>(message => { });

            sut.IsSubscribed(tag).Should().BeTrue(because: "the bus creates the subscription");
        }
Example #2
0
        public void CanUnsubscribe()
        {
            var sut = new Bus();
            ISubscriptionTag tag = sut.Subscribe <DoSomethingCommand>(message => { });

            sut.Unsubscribe(tag);
            sut.IsSubscribed(tag).Should().BeFalse(because: "the bus unsubscribe it");
        }
Example #3
0
        public void CanSubscribeSubscriber()
        {
            ISubscriber subscriber = A.Fake <ISubscriber>();

            var sut = new Bus();
            ISubscriptionTag tag = sut.Subscribe <string>(subscriber);

            tag.Should().NotBeNull();
            A.CallTo(() => subscriber.SubscribeTo(A <ISourceBlock <IMessage> > .Ignored)).MustHaveHappenedOnceExactly();
        }
Example #4
0
        public void BuildWithoutSubscribers()
        {
            var registry = A.Fake <ISubscriptionRegistry>();
            var sut      = new AmqpSubscriptionBuilder();

            ISubscriptionTag publishingTag = sut.Build(registry);

            A.CallTo(registry)
            .Where(call => call.Method.Name == "Subscribe")
            .MustNotHaveHappened();
        }
Example #5
0
        public void BuildWithSubscribers()
        {
            var registry = A.Fake <ISubscriptionRegistry>();
            var sut      = new AmqpSubscriptionBuilder();

            sut.RouteTo <string>("test1", "test1");
            sut.RouteTo <string>("test2", "test2");

            ISubscriptionTag publishingTag = sut.Build(registry);

            A.CallTo(() => registry.Subscribe <string>(A <ISubscriber> .Ignored, A <int> .Ignored)).MustHaveHappenedTwiceExactly();
        }
Example #6
0
        public void CanLinkTo()
        {
            IAmqpConnectionFactory  connectionFactory = A.Fake <IAmqpConnectionFactory>();
            AmqpMessageBuilder      messageBuilder    = A.Fake <AmqpMessageBuilder>();
            ISourceBlock <IMessage> sourceBlock       = A.Fake <ISourceBlock <IMessage> >();
            IConnection             connection        = A.Fake <IConnection>();
            IModel channel = A.Fake <IModel>();

            A.CallTo(() => connectionFactory.CreateConnection()).Returns(connection);
            A.CallTo(() => connection.CreateModel()).Returns(channel);

            var sut = new AmqpSender(connectionFactory, messageBuilder, new LogServiceProvider());

            ISubscriptionTag tag = sut.SubscribeTo(sourceBlock);

            tag.Id.Should().NotBeNull();
        }
Example #7
0
File: Bus.cs Project: lulzzz/Kontur
        public ISubscriptionTag Subscribe <T>(ISubscriber subscriber, int queueCapacity = 1)
        {
            DataflowBlockOptions queueOptions = new DataflowBlockOptions
            {
                BoundedCapacity = queueCapacity
            };

            MessageBuffer    workerQueue   = new MessageBuffer(queueOptions);
            ISubscriptionTag subscriberTag = subscriber.SubscribeTo(workerQueue);

            ISubscriptionTag dispatcherTag = this.LinkDispatcherTo <T>(workerQueue);

            subscriberTag = new CompositeSubscriptionTag(Guid.NewGuid().ToString(), subscriberTag, dispatcherTag);
            subscribers.AddOrUpdate(subscriberTag.Id, subscriberTag, (o, n) => n);

            return(subscriberTag);
        }
Example #8
0
        public ISubscriptionTag Subscribe <T>(ISubscriber subscriber, int queueCapacity = 1)
        {
            this.logService.Info("Creating subscription to {0} with the queue capacity equals: {1}.", typeof(T), queueCapacity);
            DataflowBlockOptions queueOptions = new DataflowBlockOptions
            {
                BoundedCapacity = queueCapacity
            };

            MessageBuffer    workerQueue   = new MessageBuffer(queueOptions);
            ISubscriptionTag subscriberTag = subscriber.SubscribeTo(workerQueue);

            ISubscriptionTag dispatcherTag = this.LinkDispatcherTo <T>(workerQueue);

            subscriberTag = new CompositeSubscriptionTag(Guid.NewGuid().ToString(), subscriberTag, dispatcherTag);
            subscribers.AddOrUpdate(subscriberTag.Id, subscriberTag, (o, n) => n);

            return(subscriberTag);
        }
Example #9
0
 public void Unsubscribe(ISubscriptionTag tag)
 {
     this.logService.Info("Unsubscribeing a subscription.");
     tag.Dispose();
     this.subscribers.TryRemove(tag.Id, out var subscriber);
 }
Example #10
0
 public bool IsSubscribed(ISubscriptionTag tag)
 {
     return(subscribers.ContainsKey(tag.Id));
 }
Example #11
0
File: Bus.cs Project: lulzzz/Kontur
 public void Unsubscribe(ISubscriptionTag tag)
 {
     tag.Dispose();
     this.subscribers.TryRemove(tag.Id, out var subscriber);
 }