首先介绍一下背景以及我为什么选择AMQP来开发
1. rabbitmq作为我们的日志中转
2. 生产者只能为单进程(项目要求),且进程还需要处理其他事情,所以发送者不能够阻塞进程
3. 必须实现心跳功能(我们是与代理服务器相连,如果没有心跳且没传输数据时会被代理关闭连接,除非设置代理不关闭连接,比如nginx在十分钟没有数据的情况下就会端开连接,可以手动设置nginx的保活时间时间长一点来解决,但是治标不治本,所以最好实现心跳)
由于上述三点,我比较了SimpleAmqpClient 与AMQP-CPP,给出自己的观点:
1. SimpleAmqpClient与AMQP-CPP都是由c++封装的rabbitmq
2. SimpleAmqpClient不支持异步,发送会阻塞进程。AMQP-CPP采用回调,异步完成发送
3. 我没有找到SimpleAmqpClient的心跳发送函数,只找到设置,只能接收到服务器给的心跳,无法响应,所以会被断开(可能在其他地方,我没找到)。AMQP-CPP在回调onNegotiate中与服务器协商间隔,在onHeartbeat接收服务器心跳并手动调用heartbeat发送心跳。
4. SimpleAmqpClient的登录不能异步,这个在运行过程中如果重新登录也会阻塞住进程发的运行,毕竟我们只有一个进程。
5. SimpleAmqpClient的只能编译成动态库,如果要使用静态库需要改源码。AMQP-CPP可编译静态库与动态库。
注:SimpleAmqpClient可以实现非阻塞的登录,需要修改代码。
基于上述问题与特性