Ejemplo n.º 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var rabbitHost   = this.Configuration["rabbit:host"];
            var exchangeName = this.Configuration["rabbit:exchange"];
            var queueName    = this.Configuration["rabbit:queue"];

            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageHandlerExecutionContext = new ServiceProviderMessageHandlerExecutionContext(services, x => x.BuildServiceProvider());
            var messageSerializer = new MessageJsonSerializer();

            var eventSubscriber = new RabbitEventBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, exchangeName, ExchangeType.Topic);

            eventSubscriber.Subscribe <AccountAuthenticatedEvent, AccountAuthenticatedEventHandler>();

            services.AddSingleton <IEventSubscriber>(eventSubscriber);

            services
            .AddApworks()
            .WithDataServiceSupport(new DataServiceConfigurationOptions(sp =>
                                                                        new EntityFrameworkRepositoryContext(new AuditingDataContext())))
            .Configure();
        }
Ejemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var rabbitHost        = this.Configuration["rabbit:host"];
            var exchangeName      = this.Configuration["rabbit:exchange"];
            var queueName         = this.Configuration["rabbit:queue"];
            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageSerializer = new MessageJsonSerializer();

            services
            .AddApworks()
            .WithEventSubscriber(x => new EventBus(connectionFactory, messageSerializer, exchangeName, ExchangeType.Topic, queueName))
            .WithDefaultEventConsumer("events.*")
            .AddEventHandler(x => new AccountAuthenticatedEventHandler(x.GetService <IRepositoryContext>()))
            .WithDataServiceSupport(new DataServiceConfigurationOptions(sp =>
                                                                        new EntityFrameworkRepositoryContext(new AuditingDataContext())))
            .Configure();

            var serviceProvider = services.BuildServiceProvider();

            this.eventConsumer = serviceProvider.GetService <IEventConsumer>();
            this.eventConsumer.Consume();
        }
Ejemplo n.º 3
0
        public void Process(string message)
        {
            var letter = MessageJsonSerializer.DeserializeMessage <Letter>(message);

            if (letter != null)
            {
                LetterReceived?.Invoke(letter);
                return;
            }

            var userNetworkEvent = MessageJsonSerializer.DeserializeMessage <UserNetworkEvent>(message);

            if (userNetworkEvent != null)
            {
                NetworkEventReceived?.Invoke(userNetworkEvent);
                return;
            }


            var charUsers = MessageJsonSerializer.DeserializeMessage <ChatUsers>(message);

            if (charUsers != null)
            {
                ChatUsersReceived?.Invoke(charUsers);
                return;
            }

            var nameSet = MessageJsonSerializer.DeserializeMessage <NameSet>(message);

            if (nameSet != null)
            {
                NameSetReceived?.Invoke(nameSet);
                return;
            }
        }
Ejemplo n.º 4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            var mongoServer   = this.Configuration["mongo:server"];
            var mongoPort     = Convert.ToInt32(this.Configuration["mongo:port"]);
            var mongoDatabase = this.Configuration["mongo:db"];
            var rabbitHost    = this.Configuration["rabbit:host"];
            var exchangeName  = this.Configuration["rabbit:exchange"];

            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageSerializer = new MessageJsonSerializer();
            var messageHandlerExecutionContext = new ServiceProviderMessageHandlerExecutionContext(services, x => x.BuildServiceProvider());
            var eventPublisher = new RabbitEventBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, exchangeName, ExchangeType.Topic);

            services.AddSingleton <IEventPublisher>(eventPublisher);

            services.AddApworks()
            // .WithEventPublisher(new EventBus(new ConnectionFactory { HostName = rabbitHost }, messageSerializer, exchangeName, ExchangeType.Topic))
            .WithDataServiceSupport(new DataServiceConfigurationOptions
                                        (new MongoRepositoryContext
                                            (new MongoRepositorySettings(mongoServer, mongoPort, mongoDatabase))))
            .Configure();
        }
Ejemplo n.º 5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Reads the host machine which runs the RabbitMQ.
            var rabbitHost = this.Configuration["rabbit:host"];

            // Reads the RabbitMQ exchange setting.
            var rabbitExchangeName = this.Configuration["rabbit:exchange"];

            // Reads the name of the event queue.
            var rabbitEventQueueName = this.Configuration["rabbit:eventQueue"];

            // Reads the name of the command queue.
            var rabbitCommandQueueName = this.Configuration["rabbit:commandQueue"];

            // Reads connection string of the event store database.
            var eventStoreConnectionString = this.Configuration["mssql:event.db"];

            // Reads connection string of the query database.
            var queryDatabaseConnectionString = this.Configuration["mssql:query.db"];

            // Event/Command subscribers/publishers
            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageSerializer = new MessageJsonSerializer();
            var messageHandlerExecutionContext = new ServiceProviderMessageHandlerExecutionContext(services, x => x.BuildServiceProvider());

            var eventSubscriber = new RabbitEventBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, rabbitExchangeName, ExchangeType.Topic, rabbitEventQueueName);

            eventSubscriber.Subscribe <AccountCreatedEvent, AccountCreatedEventHandler>();
            eventSubscriber.Subscribe <TextContentChangedEvent, TextContentChangedEventHandler>();

            var commandSender     = new RabbitCommandBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, rabbitExchangeName, ExchangeType.Topic);
            var commandSubscriber = new RabbitCommandBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, rabbitExchangeName, ExchangeType.Topic, rabbitCommandQueueName);

            commandSubscriber.Subscribe <PostTextCommand, PostTextCommandHandler>();

            services.AddSingleton <IEventSubscriber>(eventSubscriber);
            services.AddSingleton <ICommandSender>(commandSender);
            services.AddSingleton <ICommandSubscriber>(commandSubscriber);

            // Domain Repository
            var eventStorageConfig = new AdoNetEventStoreConfiguration(eventStoreConnectionString);
            var objectSerializer   = new ObjectJsonSerializer();

            services.AddSingleton <ISnapshotProvider, SuppressedSnapshotProvider>();
            services.AddTransient <IEventPublisher>(x => new RabbitEventBus(connectionFactory, messageSerializer, messageHandlerExecutionContext, rabbitExchangeName, ExchangeType.Topic));
            services.AddTransient <IEventStore>(x => new SqlServerEventStore(eventStorageConfig, objectSerializer));
            services.AddTransient <IDomainRepository, EventSourcingDomainRepository>();

            // Add framework services.
            services.AddMvc();
        }
Ejemplo n.º 6
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Reads the host machine which runs the RabbitMQ.
            var rabbitHost = this.Configuration["rabbit:host"];

            // Reads the RabbitMQ exchange setting.
            var rabbitExchangeName = this.Configuration["rabbit:exchange"];

            // Reads the name of the event queue.
            var rabbitEventQueueName = this.Configuration["rabbit:eventQueue"];

            // Reads the name of the command queue.
            var rabbitCommandQueueName = this.Configuration["rabbit:commandQueue"];

            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageSerializer = new MessageJsonSerializer();

            // Add framework services.
            services.AddMvc();

            services.AddApworks()
            .WithCommandSender(new CommandBus(connectionFactory, messageSerializer, rabbitExchangeName, ExchangeType.Topic))
            .WithCommandSubscriber(new CommandBus(connectionFactory, messageSerializer, rabbitExchangeName, ExchangeType.Topic, rabbitCommandQueueName))
            .WithDefaultCommandConsumer("commands.*")
            .AddCommandHandler(new PostTextCommandHandler())
            .WithEventSubscriber(new EventBus(connectionFactory, messageSerializer, rabbitExchangeName, ExchangeType.Topic, rabbitEventQueueName))
            .WithDefaultEventConsumer("events.*")
            .AddEventHandler(new AccountCreatedEventHandler(this.Configuration))
            .Configure();

            var serviceProvider = services.BuildServiceProvider();

            this.commandSender = serviceProvider.GetService <ICommandSender>();

            this.eventConsumer = serviceProvider.GetService <IEventConsumer>();
            this.eventConsumer.Consume();

            this.commandConsumer = serviceProvider.GetService <ICommandConsumer>();
            this.commandConsumer.Consume();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 创建一个消息序列化组件。
        /// </summary>
        /// <returns></returns>
        public static IMessageSerializer CreateMessageSerializerInstance(string formatType)
        {
            IMessageSerializer messageSerializer = null;

            switch (formatType)
            {
            case "json":
                messageSerializer = new MessageJsonSerializer();
                break;

            case "xml":
                messageSerializer = new MessageXmlSerializer();
                break;

            default:
                messageSerializer = new MessageJsonSerializer();
                break;
            }
            return(messageSerializer);
        }
Ejemplo n.º 8
0
        protected virtual void ParseEvent(object sender, string message)
        {
            var messageContext = MessageJsonSerializer.ParseMessageContext(message);

            if (messageContext.messageType == MessageEnum.UserMessage)
            {
                var userMessage = JsonConvert.DeserializeObject <UserMessage>(messageContext.messageBody);
                OnGetUserMessage?.Invoke(userMessage);
            }

            if (messageContext.messageType == MessageEnum.UmpireMessage)
            {
                var umpireMessage = JsonConvert.DeserializeObject <UmpireMessage>(messageContext.messageBody);
                OnGetUmpireMessage?.Invoke(umpireMessage);
            }

            if (messageContext.messageType == MessageEnum.CoachMessage)
            {
                var coachMessage = JsonConvert.DeserializeObject <CoachMessage>(messageContext.messageBody);
                OnGetCoachMessage?.Invoke(coachMessage);
            }
        }
Ejemplo n.º 9
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            var mongoServer   = this.Configuration["mongo:server"];
            var mongoPort     = Convert.ToInt32(this.Configuration["mongo:port"]);
            var mongoDatabase = this.Configuration["mongo:db"];
            var rabbitHost    = this.Configuration["rabbit:host"];
            var exchangeName  = this.Configuration["rabbit:exchange"];

            var messageSerializer = new MessageJsonSerializer();

            services.AddApworks()
            .WithEventPublisher(new EventBus(new ConnectionFactory {
                HostName = rabbitHost
            }, messageSerializer, exchangeName, ExchangeType.Topic))
            .WithDataServiceSupport(new DataServiceConfigurationOptions
                                        (new MongoRepositoryContext
                                            (new MongoRepositorySettings(mongoServer, mongoPort, mongoDatabase))))
            .Configure();
        }
Ejemplo n.º 10
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var rabbitHost        = this.Configuration["rabbit:host"];
            var exchangeName      = this.Configuration["rabbit:exchange"];
            var queueName         = this.Configuration["rabbit:queue"];
            var connectionFactory = new ConnectionFactory {
                HostName = rabbitHost
            };
            var messageSerializer = new MessageJsonSerializer();

            services.AddScoped <AuditingDataContext>()
            .AddScoped <IEventSubscriber>(x => new EventBus(connectionFactory, messageSerializer, exchangeName, ExchangeType.Topic, queueName))
            .AddScoped <IEventHandler>(x => new AccountAuthenticatedEventHandler(x.GetService <IRepositoryContext>()))
            .AddScoped <IEventConsumer>(x =>
            {
                var handlers = x.GetServices <IEventHandler>();
                return(new EventConsumer(x.GetService <IEventSubscriber>(), handlers, "wetext.*"));
            })
            .AddApworks()
            .WithDataServiceSupport(new DataServiceConfigurationOptions(sp =>
                                                                        new EntityFrameworkRepositoryContext(sp.GetService <AuditingDataContext>())))
            .Configure();

            //var eventSubscriber = new EventBus(connectionFactory, messageSerializer, exchangeName, ExchangeType.Topic, queueName);
            //var eventHandlers = new IEventHandler[] { new AccountAuthenticatedEventHandler(services.BuildServiceProvider().GetService<IRepositoryContext>()) };
            //var eventConsumer = new EventConsumer(eventSubscriber, eventHandlers, "wetext.*");
            //eventSubscriber.MessageReceived += (x, y) =>
            //  {
            //      var message = y.Message;
            //  };

            //eventSubscriber.Subscribe("wetext.*");

            // Resolve the event consumer
            var consumer = services.BuildServiceProvider().GetService <IEventConsumer>();
        }
Ejemplo n.º 11
0
 public override string ToString()
 {
     return(MessageJsonSerializer.SerializeMessage <ChatUsers>(this));
 }
Ejemplo n.º 12
0
 public override string ToString()
 {
     return(MessageJsonSerializer.SerializeMessage <NameSet>(this));
 }
Ejemplo n.º 13
0
 public override string ToString()
 {
     return(MessageJsonSerializer.SerializeMessage <UserNetworkEvent>(this));
 }