/// <inheritdoc />
        public override IServiceEndpointClient <TMessage, TCommand, TEvent, TRequest, TResponse> CreateEndpointClient()
        {
            var serviceEndpointClient = new ServiceEndpointClient <TMessage, TCommand, TEvent, TRequest, TResponse>(
                CreateSource <TEvent>(_cloudQueueClient, GetQueueName <TEvent>(_serviceName, DEFAULT_EVENTS_QUEUE_SUFFIX)),
                CreateSource <TResponse>(_cloudQueueClient, GetQueueName <TResponse>(_serviceName, DEFAULT_RESPONSES_QUEUE_SUFFIX)),
                CreatePublisher <TRequest>(_cloudQueueClient, GetQueueName <TRequest>(_serviceName, DEFAULT_REQUESTS_QUEUE_SUFFIX)),
                CreatePublisher <TCommand>(_cloudQueueClient, GetQueueName <TCommand>(_serviceName, DEFAULT_COMMANDS_QUEUE_SUFFIX)),
                typeof(TServiceMessage));

            return(serviceEndpointClient);
        }
예제 #2
0
        public void ShouldDisposeSourcesAndPublishers()
        {
            IMessageSource <IResponse>   responseSource   = A.Fake <IMessageSource <IResponse> >();
            IMessageSource <IEvent>      eventSource      = A.Fake <IMessageSource <IEvent> >();
            IMessagePublisher <ICommand> commandPublisher = A.Fake <IMessagePublisher <ICommand> >();
            IMessagePublisher <IRequest> requestPublisher = A.Fake <IMessagePublisher <IRequest> >();
            IServiceEndpointClient       endpoint         = new ServiceEndpointClient(eventSource, responseSource, requestPublisher, commandPublisher, typeof(ITestServiceMessage1));

            endpoint.Dispose();

            A.CallTo(() => responseSource.Dispose()).MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => eventSource.Dispose()).MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => commandPublisher.Dispose()).MustHaveHappened(1, Times.Exactly);
            A.CallTo(() => requestPublisher.Dispose()).MustHaveHappened(1, Times.Exactly);
        }
        public void ShouldDisposeSourcesAndPublishers()
        {
            IMessageSource<IResponse> responseSource = A.Fake<IMessageSource<IResponse>>();
            IMessageSource<IEvent> eventSource = A.Fake<IMessageSource<IEvent>>();
            IMessagePublisher<ICommand> commandPublisher = A.Fake<IMessagePublisher<ICommand>>();
            IMessagePublisher<IRequest> requestPublisher = A.Fake<IMessagePublisher<IRequest>>();
            IServiceEndpointClient endpoint = new ServiceEndpointClient(eventSource, responseSource, requestPublisher, commandPublisher, typeof(ITestServiceMessage1));

            endpoint.Dispose();

            A.CallTo(() => responseSource.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => eventSource.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => commandPublisher.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
            A.CallTo(() => requestPublisher.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
예제 #4
0
        public static void Main(string[] args)
        {
            ServiceEndpointClient serviceClient = new ServiceEndpointClient();

            serviceClient.LoadAvailableDataCenters().Wait();
            serviceClient.LoadAvailableServices().Wait();

            var regClient = new ServiceRegistrationClient();

            regClient
            .Config(serviceName: "timsService", port: 7777, address: "localhost")
            .AddSupportedVersions(new Version(1, 0, 0))
            .AddHealthCheck("Health", 10, 20);
            regClient.RegisterServiceAsync().Wait();

            var host = new WebHostBuilder()
                       .UseKestrel()
                       .UseUrls("http://*:7777")
                       .UseStartup <Startup>()
                       .Build();

            host.Run();
        }
예제 #5
0
        public void ShouldOnlySubscribeToUnderlyingMessageSourceEventsOnce()
        {
            var messageSource1 = A.Fake<IMessageSource<IEvent>>();
            var messageSource2 = A.Fake<IMessageSource<IEvent>>();

            IServiceEndpointClient serviceEndpointClient1 = new ServiceEndpointClient(
                messageSource1,
                A.Fake<IMessageSource<IResponse>>(), 
                A.Fake<IMessagePublisher<IRequest>>(),
                A.Fake<IMessagePublisher<ICommand>>(),
                typeof(IMessage));
           
            IServiceEndpointClient serviceEndpointClient2 = new ServiceEndpointClient(
                messageSource2,
                A.Fake<IMessageSource<IResponse>>(),
                A.Fake<IMessagePublisher<IRequest>>(),
                A.Fake<IMessagePublisher<ICommand>>(),
                typeof(IMessage));

            int subscribed1 = 0;
            int subscribed2 = 0;
            int disposed1 = 0;
            int disposed2 = 0;

            IObservable<IEvent> observable1 = Observable.Create<IEvent>(observer =>
            {
                subscribed1++;
                return Disposable.Create(() => disposed1++);
            });

            IObservable<IEvent> observable2 = Observable.Create<IEvent>(observer =>
            {
                subscribed2++;
                return Disposable.Create(() => disposed2++);
            });

            A.CallTo(() => messageSource1.Messages).Returns(observable1);
            A.CallTo(() => messageSource2.Messages).Returns(observable2);

            IServiceBus serviceBus = new ServiceBus(new[] { serviceEndpointClient1, serviceEndpointClient2 }, new IServiceEndpoint[0]);

            IObserver<IEvent> observer1 = A.Fake<IObserver<IEvent>>();
            IObserver<IEvent> observer2 = A.Fake<IObserver<IEvent>>();
            IObserver<IEvent> observer3 = A.Fake<IObserver<IEvent>>();
            IObserver<IEvent> observer4 = A.Fake<IObserver<IEvent>>();

            IDisposable sub1 = serviceBus.Events.Subscribe(observer1);
            IDisposable sub2 = serviceBus.Events.Subscribe(observer2);
            sub1.Dispose();
            IDisposable sub3 = serviceBus.Events.Subscribe(observer3);
            IDisposable sub4 = serviceBus.Events.Subscribe(observer4);
            
            Assert.That(subscribed1, Is.EqualTo(1));
            Assert.That(subscribed2, Is.EqualTo(1));
            Assert.That(disposed1, Is.EqualTo(0));
            Assert.That(disposed2, Is.EqualTo(0));
            
            sub2.Dispose();
            sub3.Dispose();
            sub4.Dispose();

            Assert.That(disposed1, Is.EqualTo(1));
            Assert.That(disposed2, Is.EqualTo(1));
        }