最近在研究RabbitMq,根据官网例子写了个程序,包含生产者和消费者两个子程序
现在情况是这样,我生产者每次生产5条数据,消费者能立即接受到5条然后处理,接收代码
Console.WriteLine(" [*] Waiting for messages.");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
LogHelper.Instance.PayCenterFileLog.Info(message);
Console.WriteLine(" [x] Received {0}", message);
};
channel.BasicConsume(queue: "PaymentMessageQueue", noAck: true, consumer: consumer);
Console.ReadLine();
这段代码会把5条嘻嘻读取出来处理,问题是:
我在消费端是不是只需要写一个程序,启动起来不关闭,一直监听数据,然后处理数据
还是需要写一个服务,定时执行该程序,服务执行时候再处理数据
你如果用 EventingBasicConsumer 来监听消息队列的话,只需要把程序运行起来,当然也可以把程序用服务承载,再配置一下自动断线重连啥的就可以了,一有新的消息就会通过 Received 事件通知你的了。
你如果用主动拉的方式去消息队列取数据的话,就要像你下面说的要搞个程序定时去队列拉数据下来。
两种方式各有利弊,看使用场景吧。
要写一个windows服务.不用定时执行.只要注册了就行.我有个框架很好用私聊我吧.