当我们使用 RabbitMQ 发布和订阅模式时如何调用另一个方法?

How to call another method when we are using RabbitMQ Publish and Subscriber pattern?

我有一个程序需要处理来自两个来源的事务,第一个来自 RabbitMQ,另一个来自数据库。对于第一个,我正在使用 RabbitMQ 发布和订阅者模式,这样只要有任何事务进入队列,那么此方法就可以处理该事务,但是发布和订阅者模式的问题是,它没有将控制权交给其他方法。如果交易是从队列中处理的,那么它正在等待新的交易。我知道这是这种模式的行为,但是如果队列中没有交易,如何在两者之间调用其他方法(来自数据库的交易)。

有趣的东西。关于 CPython 的真相是,由于 GIL,它本质上是单线程的。因此,当订阅者线程是 运行 - 我猜你正在使用线程 - 订阅者实际上正在轮询新消息,因此总是很忙,所以它永远不会放弃对数据库线程的控制。解决方案:切换到多处理模块而不是线程。或者你可以交错轮询 RabbitMQ 和工作你的数据库线程。

我已经使用下面的代码解决了这个问题

private void Poll()
    {
        while (Enabled)
        {
            try
            {
                BasicDeliverEventArgs objBasicDeliverEventArgs;
                //Get next message
                var boolMessageRecieved = _subscription.Next(60000, out objBasicDeliverEventArgs);
                //Deserialize message
                if (boolMessageRecieved)
                {
                    var objEvent = DeSerialize(objBasicDeliverEventArgs.Body);
                    if (objEvent != null)
                    {
                        registerService.Process(objEvent);
                        _subscription.Ack();
                    }
                }
                else
                {
                    //DB realted process.
                    Console.WriteLine("Idle time because there is no messages in queue");
                    System.Threading.Thread.Sleep(60000);
                }
            }
            catch (Exception)
            {
                //log
            }
        }
    }