Tru*_*der 6 c# connection amqp rabbitmq
通常,SQL连接的最佳实践是打开连接,执行查询并配置连接.但是,基于AMQP的队列服务器(如RabbitMQ)的推荐做法是什么.应用程序是否需要维护与RabbitMQ服务器的持久连接,或者为发布方发送的每条消息打开和关闭连接.
public static void Main(string[] args)
{
var factory = new ConnectionFactory() { HostName = "localhost" };
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "logs", type: "fanout");
var message = GetMessage(args);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "logs",
routingKey: "",
basicProperties: null,
body: body);
Console.WriteLine(" [x] Sent {0}", message);
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
private static string GetMessage(string[] args)
{
return ((args.Length > 0)
? string.Join(" ", args)
: "info: Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
Der*_*ley 12
在RMQ中,连接被认为是"昂贵的" - 它们占用TCP/IP端口,需要握手/协商等等.虽然这在SQL Server领域似乎微不足道,但当你谈到在RabbitMQ中每秒发送100K +消息时,这种开销变得不可行.
因此,对于RMQ,一般的最佳做法是为每个应用程序实例打开一个连接,并尽可能长时间保持打开 - 如果可以的话,应用程序实例的生命周期.
在app实例中,您可以在RMQ连接之上创建通道.你可以非常快速地创建它们.大多数应用程序在RMQ中使用单个通道进行单个操作.消息制作人?打开一个频道.从队列中消费?打开一个频道.重新定义队列?打开频道等
另外 - 如果你使用的是具有线程的语言,比如C#,你必须将你的频道限制为一个线程.不要跨线程重用通道.如果你试图这样做会发生非常糟糕的事情.
归档时间: |
|
查看次数: |
3608 次 |
最近记录: |