/// <summary> /// Registers all consumers in passed assembly. The actual Subscriber instances is /// created using <seealso cref="CreateConsumer"/>. The SubscriptionId per consumer /// method is determined by <seealso cref="GenerateSubscriptionId"/> or if the method /// is marked with <see cref="ConsumerAttribute"/> with a custom SubscriptionId. /// </summary> /// <param name="assemblies">The assembleis to scan for consumers.</param> public virtual void Subscribe(params Assembly[] assemblies) { Preconditions.CheckAny(assemblies, "assemblies", "No assemblies specified."); var genericBusSubscribeMethod = GetSubscribeMethodOfBus(); var subscriptionInfos = GetSubscriptionInfos(assemblies.SelectMany(a => a.GetTypes())); foreach (var kv in subscriptionInfos) { foreach (var subscriptionInfo in kv.Value) { var dispatchMethod = MessageDispatcher.GetType() .GetMethod(DispatchMethodName, BindingFlags.Instance | BindingFlags.Public) .MakeGenericMethod(subscriptionInfo.MessageType, subscriptionInfo.ConcreteType); var dispatchMethodType = typeof(Action <>).MakeGenericType(subscriptionInfo.MessageType); var dispatchDelegate = Delegate.CreateDelegate(dispatchMethodType, MessageDispatcher, dispatchMethod); var subscriptionAttribute = GetSubscriptionAttribute(subscriptionInfo); var subscriptionId = subscriptionAttribute != null ? subscriptionAttribute.SubscriptionId : GenerateSubscriptionId(subscriptionInfo); var busSubscribeMethod = genericBusSubscribeMethod.MakeGenericMethod(subscriptionInfo.MessageType); busSubscribeMethod.Invoke(bus, new object[] { subscriptionId, dispatchDelegate }); } } }
public ConnectionFactoryWrapper(ConnectionConfiguration connectionConfiguration, IClusterHostSelectionStrategy <ConnectionFactoryInfo> clusterHostSelectionStrategy) { this.clusterHostSelectionStrategy = clusterHostSelectionStrategy; Preconditions.CheckNotNull(connectionConfiguration, "connectionConfiguration"); Preconditions.CheckAny(connectionConfiguration.Hosts, "connectionConfiguration", "At least one host must be defined in connectionConfiguration"); Configuration = connectionConfiguration; foreach (var hostConfiguration in Configuration.Hosts) { var connectionFactory = new ConnectionFactory { UseBackgroundThreadsForIO = false, AutomaticRecoveryEnabled = false, TopologyRecoveryEnabled = false }; if (connectionConfiguration.AMQPConnectionString != null) { connectionFactory.uri = connectionConfiguration.AMQPConnectionString; } connectionFactory.HostName = hostConfiguration.Host; if (connectionFactory.VirtualHost == "/") { connectionFactory.VirtualHost = Configuration.VirtualHost; } if (connectionFactory.UserName == "guest") { connectionFactory.UserName = Configuration.UserName; } if (connectionFactory.Password == "guest") { connectionFactory.Password = Configuration.Password; } if (connectionFactory.Port == -1) { connectionFactory.Port = hostConfiguration.Port; } if (Configuration.Ssl.Enabled) { connectionFactory.Ssl = Configuration.Ssl; } connectionFactory.RequestedHeartbeat = Configuration.RequestedHeartbeat; connectionFactory.ClientProperties = Configuration.ClientProperties; clusterHostSelectionStrategy.Add(new ConnectionFactoryInfo(connectionFactory, hostConfiguration)); } }
public ConnectionFactoryWrapper(IConnectionConfiguration connectionConfiguration, IClusterHostSelectionStrategy <ConnectionFactoryInfo> clusterHostSelectionStrategy) { this.clusterHostSelectionStrategy = clusterHostSelectionStrategy; Preconditions.CheckNotNull(connectionConfiguration, "connectionConfiguration"); Preconditions.CheckAny(connectionConfiguration.Hosts, "connectionConfiguration", "At least one host must be defined in connectionConfiguration"); Configuration = connectionConfiguration; foreach (var hostConfiguration in Configuration.Hosts) { var connectionFactory = new ConnectionFactory(); if (connectionConfiguration.AMQPConnectionString != null) { connectionFactory.uri = connectionConfiguration.AMQPConnectionString; } connectionFactory.HostName = hostConfiguration.Host; if (connectionFactory.VirtualHost == "/") { connectionFactory.VirtualHost = Configuration.VirtualHost; } if (connectionFactory.UserName == "guest") { connectionFactory.UserName = Configuration.UserName; } if (connectionFactory.Password == "guest") { connectionFactory.Password = Configuration.Password; } if (connectionFactory.Port == -1) { connectionFactory.Port = connectionFactory.Port; } connectionFactory.RequestedHeartbeat = Configuration.RequestedHeartbeat; connectionFactory.ClientProperties = ConvertToHashtable(Configuration.ClientProperties); clusterHostSelectionStrategy.Add(new ConnectionFactoryInfo(connectionFactory, hostConfiguration)); } }