Browse Source

Improved RabbitMQOptions to provide extensions option to configure the client original configuration. #350

master
Savorboard 5 years ago
parent
commit
316a4d7688
2 changed files with 13 additions and 26 deletions
  1. +9
    -20
      src/DotNetCore.CAP.RabbitMQ/CAP.RabbiMQOptions.cs
  2. +4
    -6
      src/DotNetCore.CAP.RabbitMQ/IConnectionChannelPool.Default.cs

+ 9
- 20
src/DotNetCore.CAP.RabbitMQ/CAP.RabbiMQOptions.cs View File

@@ -2,15 +2,14 @@
// Licensed under the MIT License. See License.txt in the project root for license information. // Licensed under the MIT License. See License.txt in the project root for license information.


// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace

using System;
using RabbitMQ.Client;

namespace DotNetCore.CAP namespace DotNetCore.CAP
{ {
public class RabbitMQOptions public class RabbitMQOptions
{ {
/// <summary>
/// Default value for connection attempt timeout, in milliseconds.
/// </summary>
public const int DefaultConnectionTimeout = 30 * 1000;

/// <summary> /// <summary>
/// Default password (value: "guest"). /// Default password (value: "guest").
/// </summary> /// </summary>
@@ -63,21 +62,6 @@ namespace DotNetCore.CAP
/// </summary> /// </summary>
public string ExchangeName { get; set; } = DefaultExchangeName; public string ExchangeName { get; set; } = DefaultExchangeName;


/// <summary>
/// Timeout setting for connection attempts (in milliseconds).
/// </summary>
public int RequestedConnectionTimeout { get; set; } = DefaultConnectionTimeout;

/// <summary>
/// Timeout setting for socket read operations (in milliseconds).
/// </summary>
public int SocketReadTimeout { get; set; } = DefaultConnectionTimeout;

/// <summary>
/// Timeout setting for socket write operations (in milliseconds).
/// </summary>
public int SocketWriteTimeout { get; set; } = DefaultConnectionTimeout;

/// <summary> /// <summary>
/// The port to connect on. /// The port to connect on.
/// </summary> /// </summary>
@@ -87,5 +71,10 @@ namespace DotNetCore.CAP
/// Gets or sets queue message automatic deletion time (in milliseconds). Default 864000000 ms (10 days). /// Gets or sets queue message automatic deletion time (in milliseconds). Default 864000000 ms (10 days).
/// </summary> /// </summary>
public int QueueMessageExpires { get; set; } = 864000000; public int QueueMessageExpires { get; set; } = 864000000;

/// <summary>
/// RabbitMQ native connection factory options
/// </summary>
public Action<ConnectionFactory> ConnectionFactoryOptions { get; set; }
} }
} }

+ 4
- 6
src/DotNetCore.CAP.RabbitMQ/IConnectionChannelPool.Default.cs View File

@@ -6,7 +6,6 @@ using System.Collections.Concurrent;
using System.Diagnostics; using System.Diagnostics;
using System.Threading; using System.Threading;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using RabbitMQ.Client; using RabbitMQ.Client;


namespace DotNetCore.CAP.RabbitMQ namespace DotNetCore.CAP.RabbitMQ
@@ -42,7 +41,7 @@ namespace DotNetCore.CAP.RabbitMQ
Exchange = options.ExchangeName + "." + capOptions.Version; Exchange = options.ExchangeName + "." + capOptions.Version;
} }


_logger.LogDebug("RabbitMQ configuration of CAP :{0} {1}", Environment.NewLine, JsonConvert.SerializeObject(options, Formatting.Indented));
_logger.LogDebug($"RabbitMQ configuration:'HostName:{options.HostName}, Port:{options.Port}, UserName:{options.UserName}, Password:{options.Password}, ExchangeName:{options.ExchangeName}'");
} }


IModel IConnectionChannelPool.Rent() IModel IConnectionChannelPool.Rent()
@@ -88,19 +87,18 @@ namespace DotNetCore.CAP.RabbitMQ
UserName = options.UserName, UserName = options.UserName,
Port = options.Port, Port = options.Port,
Password = options.Password, Password = options.Password,
VirtualHost = options.VirtualHost,
RequestedConnectionTimeout = options.RequestedConnectionTimeout,
SocketReadTimeout = options.SocketReadTimeout,
SocketWriteTimeout = options.SocketWriteTimeout
VirtualHost = options.VirtualHost
}; };


if (options.HostName.Contains(",")) if (options.HostName.Contains(","))
{ {
options.ConnectionFactoryOptions?.Invoke(factory);
return () => factory.CreateConnection( return () => factory.CreateConnection(
options.HostName.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries)); options.HostName.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries));
} }


factory.HostName = options.HostName; factory.HostName = options.HostName;
options.ConnectionFactoryOptions?.Invoke(factory);
return () => factory.CreateConnection(); return () => factory.CreateConnection();
} }




Loading…
Cancel
Save