public MyService(IBusFactory busFactory , IMessageAuditStore auditStore ) { _busFactory = busFactory ?? throw new ArgumentNullException(nameof(busFactory)); _auditStore = auditStore; }
public static void ConfigureWhenContainerIsVerified(Container container, IBusControl busControl) { IMessageAuditStore store = container.GetInstance(typeof(MessageAuditStore)) as IMessageAuditStore; busControl.ConnectConsumeAuditObserver(store); busControl.Start(); }
/// <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); }
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)); }
/// <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; }
public AuditSendObserver(IMessageAuditStore store, ISendMetadataFactory metadataFactory, CompositeFilter <SendContext> filter) { _store = store; _metadataFactory = metadataFactory; _filter = filter; }
public BusService(IBusControl busControl, IMessageAuditStore auditStore) { this.busControl = busControl; this.auditStore = auditStore; }
public AuditConsumeObserver(IMessageAuditStore store, IConsumeMetadataFactory metadataFactory, CompositeFilter <ConsumeContext> filter) { _store = store; _metadataFactory = metadataFactory; _filter = filter; }
/// <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))); }