目前我们已经创建了将消息发布到Rabbitmq的方法:
bool PublishToQueue(string QueueName, NameValueCollection nvc)
{
ConnectionFactory connectionFactory = null;
IConnection connection = connectionFactory.CreateConnection(hostName);
IModel model = connection.CreateModel();
model.ExchangeDeclare(ExchangeName, ExchangeType.Direct);
model.QueueBind(queueName, ExchangeName, queueName + "Key", null);
model.ConfirmSelect();
BinaryFormatter bf = new BinaryFormatter();
bf.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, nvc);
SendMessage(model, ms.ToArray(), "RabbitMQ-" + QueueName + "-Exchange", "RabbitMq-" + QueueName + "-QueueKey", nvc["id"], nvc["category"]);
}
虽然队列是幂等的,所以不会再次创建。但我认为,对于每条消息,一次又一次地初始化连接,模型,交换及其绑定是不正确的。
有人能告诉我分离队列初始化和发送消息的最佳方法是什么?
注意:这是简化的代码。我没有包括回退代码,所有变量初始化,如ExchangeName等。
答案 0 :(得分:0)
我使用一个负责声明交换,队列和创建绑定的类。它具有静态字典,用于存储已声明和绑定的交换和队列的名称。在进行声明之前,它会检查这些静态字典(以线程安全的方式)以查看它是否已经声明它,因此在应用程序的生命周期内只进行一次声明。