public MyService(IBusFactory busFactory
                  , IMessageAuditStore auditStore
                  )
 {
     _busFactory = busFactory ?? throw new ArgumentNullException(nameof(busFactory));
     _auditStore = auditStore;
 }
Esempio n. 2
0
        public static void ConfigureWhenContainerIsVerified(Container container, IBusControl busControl)
        {
            IMessageAuditStore store = container.GetInstance(typeof(MessageAuditStore)) as IMessageAuditStore;

            busControl.ConnectConsumeAuditObserver(store);

            busControl.Start();
        }
Esempio n. 3
0
    /// <summary>
    /// Добавляет шину данных МассТранзит.
    /// </summary>
    public static IServiceCollection AddCustomMessageBus(this IServiceCollection services, AppSecrets secrets)
    {
        services.AddSingleton <IMessageAuditStore, MessageAuditStore>();

        services.AddMassTransit(options =>
        {
            options.UsingRabbitMq((context, cfg) =>
            {
                cfg.Host(secrets.MessageBusHost, secrets.MessageBusVHost, h =>
                {
                    h.Username(secrets.MessageBusLogin);
                    h.Password(secrets.MessageBusPassword);
                });

                IMessageAuditStore auditStore = context.GetRequiredService <IMessageAuditStore>();
                cfg.ConnectSendAuditObservers(auditStore, c => c.Exclude(typeof(IServiceTemplateTestRequestV1), typeof(IServiceTemplateTestResponseV1)));
                cfg.ConnectConsumeAuditObserver(auditStore, c => c.Exclude(typeof(IServiceTemplateTestRequestV1), typeof(IServiceTemplateTestResponseV1)));

                cfg.UseSerilogMessagePropertiesEnricher();
                cfg.UsePrometheusMetrics();

                cfg.ReceiveEndpoint(MbQueueNames.PrivateServiceQueueName, e =>
                {
                    e.PrefetchCount = 16;
                    e.UseMessageRetry(x => x.Interval(2, 500));
                    e.AutoDelete        = true;
                    e.Durable           = false;
                    e.ExchangeType      = "fanout";
                    e.Exclusive         = true;
                    e.ExclusiveConsumer = true;

                    e.ConfigureConsumer <TestRequestConsumer>(context);
                });

                cfg.ReceiveEndpoint("ya.servicetemplate.receiveendpoint", e =>
                {
                    e.PrefetchCount = 16;
                    e.UseMessageRetry(x => x.Interval(2, 100));
                    e.UseMbContextFilter();

                    e.ConfigureConsumer <SomethingHappenedConsumer>(context);
                });
            });

            options.AddConsumers(Assembly.GetExecutingAssembly());
        });

        services.AddMassTransitHostedService();

        services.AddSingleton <IPublishEndpoint>(provider => provider.GetRequiredService <IBusControl>());
        services.AddSingleton <ISendEndpointProvider>(provider => provider.GetRequiredService <IBusControl>());
        services.AddSingleton <IBus>(provider => provider.GetRequiredService <IBusControl>());

        return(services);
    }
Esempio n. 4
0
 public MessageBusService(ILogger <MessageBusService> logger,
                          IConfiguration config,
                          IBusControl busControl,
                          IMessageAuditStore auditStore,
                          MessageBusServiceHealthCheck messageBusServiceHealthCheck)
 {
     _log        = logger ?? throw new ArgumentNullException(nameof(logger));
     _config     = config ?? throw new ArgumentNullException(nameof(config));
     _busControl = busControl ?? throw new ArgumentNullException(nameof(busControl));
     _auditStore = auditStore ?? throw new ArgumentNullException(nameof(auditStore));
     _messageBusServiceHealthCheck = messageBusServiceHealthCheck ?? throw new ArgumentNullException(nameof(messageBusServiceHealthCheck));
 }
Esempio n. 5
0
        /// <summary>
        /// Adds observers that will audit all published and sent messages, sending them to the message audit store after they are sent/published.
        /// </summary>
        /// <param name="connector">The bus</param>
        /// <param name="store">Audit store</param>
        /// <param name="configureFilter">Filter configuration delegate</param>
        /// <param name="metadataFactory">Message metadata factory. If omitted, the default one will be used.</param>
        public static ConnectHandle ConnectSendAuditObservers <T>(this T connector, IMessageAuditStore store,
                                                                  Action <IMessageFilterConfigurator> configureFilter = null, ISendMetadataFactory metadataFactory = null)
            where T : ISendObserverConnector, IPublishObserverConnector
        {
            var specification = new SendMessageFilterSpecification();

            configureFilter?.Invoke(specification);

            var factory = metadataFactory ?? new DefaultSendMetadataFactory();

            var sendHandle    = connector.ConnectSendObserver(new AuditSendObserver(store, factory, specification.Filter));
            var publishHandle = connector.ConnectPublishObserver(new AuditPublishObserver(store, factory, specification.Filter));

            return(new MultipleConnectHandle(sendHandle, publishHandle));
        }
 public WhatsappHandlerService(IEnumerable <IMediaServiceProvider> mediaServiceProviders,
                               ILogger <WhatsappHandlerService> logger, IMessageTranslater messageTranslater, IBoxStore boxStore,
                               IUserStore userStore, IMessageAuditStore auditStore)
 {
     Guard.NotNull(messageTranslater, nameof(messageTranslater));
     Guard.NotNull(mediaServiceProviders, nameof(mediaServiceProviders));
     Guard.NotNull(logger, nameof(logger));
     Guard.NotNull(userStore, nameof(userStore));
     Guard.NotNull(boxStore, nameof(boxStore));
     Guard.NotNull(auditStore, nameof(auditStore));
     _imageServiceProvider   = mediaServiceProviders.FirstOrDefault(msp => msp.SupportedType == MediaType.Image);
     _messageServiceProvider = mediaServiceProviders.FirstOrDefault(msp => msp.SupportedType == MediaType.Text);
     _logger            = logger;
     _boxStore          = boxStore;
     _auditStore        = auditStore;
     _userStore         = userStore;
     _messageTranslater = messageTranslater;
 }
Esempio n. 7
0
 public AuditSendObserver(IMessageAuditStore store, ISendMetadataFactory metadataFactory, CompositeFilter <SendContext> filter)
 {
     _store           = store;
     _metadataFactory = metadataFactory;
     _filter          = filter;
 }
Esempio n. 8
0
 public BusService(IBusControl busControl, IMessageAuditStore auditStore)
 {
     this.busControl = busControl;
     this.auditStore = auditStore;
 }
Esempio n. 9
0
 public AuditConsumeObserver(IMessageAuditStore store, IConsumeMetadataFactory metadataFactory, CompositeFilter <ConsumeContext> filter)
 {
     _store           = store;
     _metadataFactory = metadataFactory;
     _filter          = filter;
 }
Esempio n. 10
0
        /// <summary>
        /// Add an observer that will audit consumed messages, sending them to the message audit store prior to consumption by the consumer
        /// </summary>
        /// <param name="connector">The bus or endpoint</param>
        /// <param name="store">The audit store</param>
        /// <param name="configureFilter">Filter configuration delegate</param>
        /// <param name="metadataFactory">Message metadata factory. If omitted, the default one will be used.</param>
        public static ConnectHandle ConnectConsumeAuditObserver(this IConsumeObserverConnector connector, IMessageAuditStore store,
                                                                Action <IMessageFilterConfigurator> configureFilter = null, IConsumeMetadataFactory metadataFactory = null)
        {
            if (connector == null)
            {
                throw new ArgumentNullException(nameof(connector));
            }
            if (store == null)
            {
                throw new ArgumentNullException(nameof(store));
            }

            var specification = new ConsumeMessageFilterSpecification();

            configureFilter?.Invoke(specification);

            var factory = metadataFactory ?? new DefaultConsumeMetadataFactory();

            return(connector.ConnectConsumeObserver(new AuditConsumeObserver(store, factory, specification.Filter)));
        }