c# - 在单例类中包装 RabbitMQ 连接
问题描述
我已经读过,当我使用 RabbitMQ 时,最佳实践是每个进程使用一个连接,所以我想为 rabbitmq 连接创建一个单例类。我想使用来自: Implementing the Singleton Pattern in C#的懒惰版本的 Singleton
我写这堂课:
public class RabbitConnection
{
private static readonly Lazy<RabbitConnection> Lazy = new Lazy<RabbitConnection>(() => new RabbitConnection());
private RabbitConnection()
{
IConnectionFactory connectionFactory = new ConnectionFactory
{
HostName = "127.0.0.1",
Port = 5672,
UserName = "Username",
Password = "********"
};
Connection = connectionFactory.CreateConnection();
}
public static RabbitConnection Instance
{
get { return Lazy.Value; }
}
public IConnection Connection { get; }
}
并像这样使用:
var channel = RabbitConnection.Instance.Connection.CreateModel();
channel.QueueDeclare("myQueue", true, false, false, null);
....
这个实现是对还是错?谢谢
解决方案
我已经读过,当我使用 RabbitMQ 时,最佳做法是每个进程使用一个连接
不,这是不正确的。您应该使用与用例需求一样多的连接,并通过使用预期工作负载的基准来确定连接/通道数。
注意: RabbitMQ 团队会监控rabbitmq-users
邮件列表,有时只会在 StackOverflow 上回答问题。
推荐阅读
- c++ - 右值引用可以作为 const 引用传递吗?
- java - Spring Boot 选择了错误的 CorsFilter
- c++ - 为什么按位 OR 和 AND 逻辑没有按预期工作?
- sql-server - T-SQL - 大表中的总 SUM 行和列
- java - 将 List 添加到嵌套 List 时,为什么需要使用构造函数来创建新的列表实例,而不是仅添加现有列表?
- google-apps-script - 来自 API 的 Google 表格数据源(不是 BigQuery)
- flutter - Flutter 应用程序 - 出现连续错误“应用程序可能在其主线程上做了太多工作”
- r - 如何在 R 中的 cut 函数中放置多个中断?
- laravel - 拉拉维尔 | Blade 视图中不止一个 CubePortfolio 库
- android - 我想在通知中添加一个大图标,但是当我运行应用程序时,大图标不显示。下面是我的代码,有什么错误的帮助吗?