public static IBusSubscriber SubscribeCommand <T>(this IBusSubscriber busSubscriber) where T : class, ICommand
 {
     return(busSubscriber.Subscribe <T>((sp, command, ctx) =>
     {
         var commandHandler = sp.GetRequiredService <ICommandHandler <T> >();
         return commandHandler.HandleAsync(command);
     }));
 }
 public static IBusSubscriber SubscribeEvent <T>(this IBusSubscriber busSubscriber) where T : class, IEvent
 {
     return(busSubscriber.Subscribe <T>((sp, @event, ctx) =>
     {
         var commandHandler = sp.GetRequiredService <IEventHandler <T> >();
         return commandHandler.HandleAsync(@event);
     }));
 }
示例#3
0
 public CreateAirplaneHandlerTests()
 {
     _airplanesRepository = Substitute.For <IAirplanesRepository>();
     _busPublisher        = Substitute.For <IBusPublisher>();
     _busSubscriber       = Substitute.For <IBusSubscriber>();
     _correlationContext  = Substitute.For <ICorrelationContext>();
     _commandHandler      = new CreateAirplaneHandler(_airplanesRepository, _busPublisher);
 }
示例#4
0
 protected override void SubscribeEventAndMessageBus(IBusSubscriber bus)
 {
     // base.SubscribeEventAndMessageBus(bus);
     if (DomainType != null)
     {
         bus.SubscribeAllCommands(true, DomainType.Assembly);
         //bus.SubscribeOnRejected(DomainType.Assembly);
     }
     //bus.SubscribeCommand<CreateProduct>(onError: (c, e) => new CreateProductRejected(c.Id, e.Message, e.Code));
 }
示例#5
0
        private static IBusSubscriber SubscribeAllMessages <TMessage>
            (this IBusSubscriber subscriber, string subscribeMethod, bool excludeOperationsMessages = false, params Assembly[] assemblies)
        {
            var ass = new List <Assembly>(assemblies);

            //ass.Insert(0, MessagesAssembly);
            ass.ForEach(assembly =>
            {
                var messageTypes = assembly
                                   .GetTypes()
                                   .Where(t => t.IsClass && !(t.IsAbstract) && typeof(TMessage).IsAssignableFrom(t))
                                   .Where(t => excludeOperationsMessages && !ExcludedMessages.Contains(t))
                                   .ToList();

                var m0 = subscriber.GetType().GetMethod(subscribeMethod);
                var m1 = typeof(Extensions).GetMethod("CreateOnRejected", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
                foreach (var mt in messageTypes)
                {
                    // if (mt.Name == "CreateTypeDePropriete")
                    //   Debugger.Break();
                    try
                    {
                        var keyType = mt.GetProperty("Id").GetGetMethod().ReturnType;
                        var m2      = m0.MakeGenericMethod(mt);
                        var p0      = mt.GetCustomAttribute <MessageNamespaceAttribute>()?.Namespace;
                        var m3      = m1.MakeGenericMethod(keyType);
                        var p1      = m3.Invoke(null, new object[] { mt });
                        var p       = new object[] { p0, null, p1 };
                        m2.Invoke(subscriber, p);
                    }catch (Exception e)
                    {
                        Logger.LogError(e.Message);
#if DEBUG
                        Debugger.Break();
#endif
                    }
                }

                /*messageTypes.ForEach(mt =>
                 *  subscriber.GetType()
                 *  .GetMethod(subscribeMethod)
                 *  .MakeGenericMethod(mt)
                 *  .Invoke(subscriber,
                 *      new object[] {
                 *          mt.GetCustomAttribute<MessageNamespaceAttribute>()?.Namespace,
                 *          null,
                 *          CreateOnRejected(mt) }));*/
            });


            return(subscriber);
        }
示例#6
0
        private static IBusSubscriber SubscribeAllMessages <TMessage>(this IBusSubscriber subscriber, string subscriberMethod)
        {
            var messageTypes = MessageAssembly
                               .GetTypes()
                               .Where(t => t.IsClass && typeof(TMessage).IsAssignableFrom(t))
                               .Where(t => !ExcludeMessages.Contains(t))
                               .ToList();

            messageTypes.ForEach(mt => subscriber.GetType()
                                 .GetMethod(subscriberMethod)
                                 .MakeGenericMethod(mt)
                                 .Invoke(subscriber,
                                         new object[] { mt.GetCustomAttribute <MessageNamespaceAttribute>()?.Namespace, null, null }));
            return(subscriber);
        }
示例#7
0
        protected virtual void SubscribeEventAndMessageBus(IBusSubscriber bus)
        {
            if (UseSignalR)
            {
                bus.SubscribeEvent <OperationPending>(@namespace: "operations")
                .SubscribeEvent <OperationCompleted>(@namespace: "operations")
                .SubscribeEvent <OperationRejected>(@namespace: "operations");
            }

            if (DomainType != null)
            {
                bus.SubscribeAllMessages(true, DomainType.Assembly);
                // bus.SubscribeOnRejected(DomainType.Assembly);
            }
        }
示例#8
0
        private static void SubscribeCommands(IBusSubscriber subscriber, IEnumerable <ICommand> messages)
        {
            const string methodName = nameof(IBusSubscriber.Subscribe);

            foreach (var message in messages)
            {
                var subscribeMethod = subscriber.GetType().GetMethod(methodName);

                Task Handle(IServiceProvider sp, ICommand command, ICorrelationContext ctx) =>
                sp.GetService <ICommandHandler <ICommand> >().HandleAsync(command);

                subscribeMethod.MakeGenericMethod(message.GetType()).Invoke(subscriber,
                                                                            new object[] { (Func <IServiceProvider, ICommand, ICorrelationContext, Task>)Handle });
            }
        }
        public static IBusSubscriber SubscribeMessages(this IBusSubscriber subscriber)
        {
            const string path = "messages.json";

            if (!File.Exists(path))
            {
                return(subscriber);
            }

            var messages = File.ReadAllText(path);

            if (string.IsNullOrWhiteSpace(messages))
            {
                return(subscriber);
            }

            var servicesMessages = JsonConvert.DeserializeObject <IDictionary <string, ServiceMessages> >(messages);

            if (!servicesMessages.Any())
            {
                return(subscriber);
            }

            var commands        = new List <Command>();
            var events          = new List <TestEvent>();
            var rejectedEvents  = new List <Application.Types.RejectedEvent>();
            var assemblyName    = new AssemblyName("Sprirebyte.Services.Operations.Api.Messages");
            var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
            var moduleBuilder   = assemblyBuilder.DefineDynamicModule(assemblyName.Name);

            foreach (var(_, serviceMessages) in servicesMessages)
            {
                var exchange = serviceMessages.Exchange;
                commands.AddRange(BindMessages <Command>(moduleBuilder, exchange, serviceMessages.Commands));
                events.AddRange(BindMessages <TestEvent>(moduleBuilder, exchange, serviceMessages.Events));
                rejectedEvents.AddRange(BindMessages <Application.Types.RejectedEvent>(moduleBuilder, exchange,
                                                                                       serviceMessages.RejectedEvents));
            }

            SubscribeCommands(subscriber, commands);
            SubscribeEvents(subscriber, events);
            SubscribeRejectedEvents(subscriber, rejectedEvents);

            return(subscriber);
        }
        private static void SubscribeCommands(IBusSubscriber subscriber, IEnumerable <ICommand> messages)
        {
            if (messages is null)
            {
                return;
            }

            var subscribeMethod = subscriber.GetType().GetMethod(nameof(IBusSubscriber.Subscribe));

            if (subscribeMethod is null)
            {
                return;
            }

            foreach (var message in messages)
            {
                subscribeMethod.MakeGenericMethod(message.GetType()).Invoke(subscriber,
                                                                            new object[] { (Func <IServiceProvider, ICommand, object, Task>)Handle });
            }
        public TopicSubscriberSelfDestroyingTopicWrapper(BusManager busManager,
                                                         SubscriberSettings <TMessage> subscriberSettings,
                                                         ITopicNameGetter topicNameGetter,
                                                         IMessageSerializer <TMessage> messageSerializer,
                                                         ILogger logger,
                                                         TrackingModule trackingModule)
        {
            _topicName = topicNameGetter.Get <TMessage>(subscriberSettings);

            _busSubscriber = new TopicSubscriberV2 <TMessage>(
                busManager,
                subscriberSettings,
                topicNameGetter,
                messageSerializer,
                logger,
                trackingModule);

            UsedTopics.Add(_topicName);
        }
示例#12
0
        public static IBusSubscriber SubscribeOnRejected(this IBusSubscriber bus, params Assembly[] assemblies)
        {
            var typesWithMyAttribute =
                from a in assemblies
                from t in a.GetTypes()
                let attributes = t.GetCustomAttributes(typeof(OnRejectedAttribute), true)
                                 where attributes != null && attributes.Length > 0
                                 select new { Type = t, Attributes = attributes.Cast <OnRejectedAttribute>() };

            foreach (var item in typesWithMyAttribute)
            {
                var type = item.Attributes.First().Type;
                bus.SubscribeCommandByType(item.Type, onError: (c, e) =>
                {
                    var o = (BaseRejectedEvent)c;
                    return((IRejectedEvent)Activator.CreateInstance(type, o.Id, o.Reason, o.Code));
                });
            }
            return(bus);
        }
示例#13
0
 public BusHostedService(IBusSubscriber busSubscriber) => _busSubscriber = busSubscriber;
示例#14
0
 public BaseHostedService(IBusSubscriber busSubscriber,
                          IDispatcher dispatcher)
 {
     _busSubscriber = busSubscriber;
     _dispatcher    = dispatcher;
 }
示例#15
0
 private static IBusSubscriber SubscribeAllEvents(this IBusSubscriber subscriber)
 => subscriber.SubscribeAllMessages <IEvent>(nameof(IBusSubscriber.SubscribeEvent));
示例#16
0
 private static IBusSubscriber SubscribeAllCommands(this IBusSubscriber subscriber)
 => subscriber.SubscribeAllMessages <ICommand>(nameof(IBusSubscriber.SubscribeCommand));
示例#17
0
 public static IBusSubscriber SubscribeAllMessages(this IBusSubscriber subscriber)
 => subscriber.SubscribeAllCommands().SubscribeAllEvents();
示例#18
0
 public static IBusSubscriber SubscribeAllMessages(this IBusSubscriber subscriber, bool excludeOperationsMessages = false, params Assembly[] assemblies)
 => subscriber
 .SubscribeAllCommands(excludeOperationsMessages, assemblies)
 .SubscribeAllEvents(excludeOperationsMessages, assemblies);
示例#19
0
 public HandleMessage(IBusSubscriber subscriber)
 {
     _log.Debug("ctor -=========================================");
     _subscriber = subscriber;
 }
示例#20
0
 public static IBusSubscriber SubscribeAllCommands(this IBusSubscriber subscriber, bool excludeOperationsMessages = false, params Assembly[] assemblies)
 => subscriber.SubscribeAllMessages <ICommand>(nameof(IBusSubscriber.SubscribeCommand), excludeOperationsMessages, assemblies);
示例#21
0
 public static IBusSubscriber SubscribeAllEvents(this IBusSubscriber subscriber, bool excludeOperationsMessages = false, params Assembly[] assemblies)
 => subscriber.SubscribeAllMessages <IEvent>(nameof(IBusSubscriber.SubscribeEvent), excludeOperationsMessages, assemblies);
示例#22
0
 public static IBusSubscriber SubscribeCommand <T>(this IBusSubscriber busSubscriber) where T : class, ICommand
 => busSubscriber.Subscribe <T>(async(serviceProvider, command, _) =>
 public static IBusSubscriber SubscribeCommand <T>(this IBusSubscriber busSubscriber) where T : class, ICommand
 => busSubscriber.Subscribe <T>((sp, command, ctx) => sp.GetService <ICommandHandler <T> >().HandleAsync(command));
示例#24
0
 public static IBusSubscriber SubscribeEvent <T>(this IBusSubscriber busSubscriber) where T : class, IIntegrationEvent
 => busSubscriber.Subscribe <T>(async(serviceProvider, @event, _) =>
示例#25
0
 public ValuesController(IBusPublisher publisher, IBusSubscriber subscriber)
 {
     _publisher  = publisher;
     _subscriber = subscriber;
 }
 public static IBusSubscriber SubscribeEvent <T>(this IBusSubscriber busSubscriber) where T : class, IEvent
 => busSubscriber.Subscribe <T>((sp, @event, ctx) => sp.GetService <IEventHandler <T> >().HandleAsync(@event));
示例#27
0
 public StubbedBusPublisher(IBusSubscriber subscriber)
 {
     _busSubscriber = subscriber;
 }
示例#28
0
 protected override void SubscribeEventAndMessageBus(IBusSubscriber bus)
 {
     base.SubscribeEventAndMessageBus(bus);
     bus.SubscribeAllMessages(true, Assembly.GetEntryAssembly(), Assembly.GetExecutingAssembly());
 }
示例#29
0
 public StubbedControllerBusPublisher(IBusSubscriber busSubscriber)
 {
     _busSubscriber = busSubscriber;
 }