【发布时间】:2015-11-13 22:08:41
【问题描述】:
我有一个 rabbitmq 消费者应用程序在 .net 中实现“发布/订阅模式”,它作为控制台应用程序完美运行,但是当我将其部署为 Windows 服务时,它似乎没有将数据保存到 mongodb 中。
protected override void OnStart(string[] args)
{
try
{
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "test", type: "fanout");
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "logs", routingKey: "");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
BsonDocument document = BsonDocument.Parse(message);
var database = client.GetDatabase("test");
var collection = database.GetCollection<BsonDocument>("test_collection");
collection.InsertOneAsync(document);
};
channel.BasicConsume(queue: queueName, noAck: true,consumer: consumer);
}
}
}
catch (Exception ex)
{
throw;
}
}
我有什么遗漏的吗?
【问题讨论】:
-
你检查日志了吗?
-
您无需等待 InsertOneAsync 的结果...任何事情都可能发生,您永远不会知道...使用 collection.InsertOneAsync(document).GetAwaiter().GetResult() ;
-
@Gabriele 我确实尝试登录以查看是否确实收到了消息。但看起来不像。
-
@CraigWilson 一开始甚至没有任何消息可以转储到 mongoDB 中。另外,为了验证我检查了 mongoDB 的日志。没有从该服务转储给它的数据
标签: .net windows-services rabbitmq mongodb-.net-driver