【发布时间】:2019-08-31 18:52:37
【问题描述】:
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var eventName = ea.RoutingKey;
var message = Encoding.UTF8.GetString(ea.Body);
ProcessEvent(eventName, message);
channel.BasicAck(ea.DeliveryTag, multiple: false);
};
channel.BasicConsume(queue: _queueName,
autoAck: false,
consumer: consumer);
private void ProcessEvent(string eventName, string message)
{
//code send the acknowledgement here, before completing the processing
if (_subsManager.HasSubscriptionsForEvent(eventName)
{
using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME))
{
var subscriptions = _subsManager.GetHandlersForEvent(eventName);
foreach (var subscription in subscriptions)
{
if (subscription.IsDynamic)
{
var handler = scope.ResolveOptional(subscription.HandlerType) as IDynamicIntegrationEventHandler;
dynamic eventData = JObject.Parse(message);
handler.Handle(eventData);}
//当客户端使用 RabbitMQ 完全处理完消息时,我需要确认。在我的应用程序中,一旦调用了消费者构造函数,就会得到确认。我希望只有在处理完成后才能完成。我为消息代理创建了一个通用类。但我想要这个功能用于特定的订阅事件。这是我的代码,我正在处理事件
【问题讨论】: