我正在评估RabbitMQ,虽然(AMQP本身,以及RabbitMQ)的总体印象是积极的,但我对结果并不是很满意 .

我正在尝试同时发布和使用消息,并且已经实现了非常差的消息速率 . 我有一个持久的直接交换,它绑定到一个持久的队列,我向该交换发布持久性消息 . 消息正文的平均大小约为1000字节 .

我的发布大致如下:

AMQP.BasicProperties.Builder bldr = new AMQP.BasicProperties.Builder();

ConnectionFactory factory = new ConnectionFactory();

factory.setUsername("guest");

factory.setPassword("guest");

factory.setVirtualHost("/");

factory.setHost("my-host");

factory.setPort(5672);

Connection conn = null;

Channel channel = null;

ObjectMapper mapper = new ObjectMapper(); //com.fasterxml.jackson.databind.ObjectMapper

try {

conn = factory.newConnection();

channel = conn.createChannel();

channel.confirmSelect();

} catch (IOException e) {}

for(Message m : messageList) { //the size of messageList happens to be 9945

try {

channel.basicPublish("exchange", "", bldr.deliveryMode(2).contentType("application/json").build(), mapper.writeValueAsBytes(cm));

} catch (Exception e) {}

}

try {

channel.waitForConfirms();

channel.close();

conn.close();

} catch (Exception e1) {}

并且从绑定队列中消费消息的方式如下:

AMQP.BasicProperties.Builder bldr = new AMQP.BasicProperties.Builder();

ConnectionFactory factory = new ConnectionFactory();

factory.setUsername("guest");

factory.setPassword("guest");

factory.setVirtualHost("/");

factory.setHost("my-host");

factory.setPort(5672);

Connection conn = null;

Channel channel = null;

try {

conn = factory.newConnection();

channel = conn.createChannel();

channel.basicQos(100);

while (true) {

GetResponse r = channel.basicGet("rawDataQueue", false);

if(r!=null)

channel.basicAck(r.getEnvelope().getDeliveryTag(), false);

}

} catch (IOException e) {}

问题是,当消息发布者(或其中几个)和消费者(或其中几个)同时运行时,发布者似乎全速运行,而RabbitMQ管理Web界面显示的发布率为,例如,每秒~2 ... 3K消息,但每个消费者的消耗率为0.5 ... 3 . 当出版商完成后,我得到的消费率为每个消费者300到600条消息 . 如果没有为Java客户端设置QOS预取值,那么稍微少一点,当设置为100或250时,则更多一点 .

在尝试对消费者进行一定程度的限制时,我已经成功地实现了同时发布的数据,例如每周发布约400条消息和消耗约50条消息,这些消息略微好一点,但只是略有增加 .

Here's,来自RabbitMQ博客条目的一句话,声称队列在空闲时很快就可以,但是当队列中有几千条持久性消息时,消耗速度降低到爬行速度仍然是相当不可接受的 .

较高的QOS预取值可能有所帮助,但恕我直言不是这样的解决方案 .

如果有的话,可以做些什么来实现合理的吞吐率(每个消费者每秒消耗2条消息在任何情况下都不合理)?这只是一个简单的直接交换 - 一个绑定 - 一个队列情况,我应该期望更复杂的配置会导致性能下降吗?在互联网上搜索时,也有建议放弃耐久性,但我担心在我的情况下这不是一个选择 . 如果有人会指出我是愚蠢的,并且有某种明显和直接的解决方案,我会很高兴:)

java同步调用rabbitmq,使用RabbitMQ可以放慢同步发布/消耗速度相关推荐

  1. Java api 调用Sqoop2进行MySQL--Hive的数据同步

    1.相关jar包 2.一些需要的参数定义在message.properties中 jdbcHiveUrl=jdbc:hive2://10.1.9.91:10000 //hive地址jdbcHiveDr ...

  2. layer 同步调用_YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer

    一.CALayer官方文档 Layers are often used to provide the backing store for views but can also be used with ...

  3. layer 同步调用_关于Layer组件的同步以及减少GPU带宽的问题

    本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧. 问题: 1) Layer 之间能否进行单独更新,比如其中vi ...

  4. 精通RabbitMQ之RPC同步调用

    精通RabbitMQ之RPC同步调用 前面我们对应用解耦做过分析,我们能够使用消息中间件来完成应用解耦,很大一部分原因是因为我们的系统之间可以异步处理并且不关心结果回执.假如我们现在需要异步处理的结果 ...

  5. C# 委托的三种调用示例(同步调用 异步调用 异步回调)

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b);     public clas ...

  6. C#(同步调用、异步调用、异步回调)

    本文将主要通过"同步调用"."异步调用"."异步回调"三个示例来讲解在用委托执行同一个"加法类"的时候的的区别和利弊. ...

  7. C#“同步调用”、“异步调用”、“异步回调”

    本文将主要通过"同步调用"."异步调用"."异步回调"三个示例来讲解在用委托执行同一个"加法类"的时候的的区别和利弊. ...

  8. C# 委托(同步调用、异步调用、异步回调)

    文章转自:http://www.csharpwin.com/csharpspace/12393r3151.shtml 本文将主要通过"同步调用"."异步调用". ...

  9. 7.RabbitMQ RFC同步调用

    RabbitMQ RFC同步调用是使用了两个异步调用完成的,生产者调用消费者的同时,自己也作为消费者等待某一队列的返回消息,消费者接受到生产者的消息同时,也作为消息发送者发送一消息给生产者.参考下图: ...

最新文章

  1. 【图论】有向无环图的拓扑排序
  2. 作业 3 应用分支与循环结构解决问题 统计字符个数
  3. 用django将数据从数据库提出并分页展示
  4. ubuntu 安装yum_如何在 Linux 中安装微软的 .NET Core SDK | Linux 中国
  5. Hyper-v Server在线调整虚拟硬盘大小
  6. 帝国cms7.5电脑端手机端多终端解决方案之选择哪种方案
  7. Python--str与repr以及eval的使用方法
  8. cubemx lan8720a ping不通_肩颈不通百病生,这5个开肩动作要多练
  9. 【干货】运维人员常用的Linux命令汇总
  10. Embedding在腾讯应用宝的推荐实践
  11. linux查看当前会话文件夹,Linux 记录会话过程的命令
  12. [XSY3343] 程序锁(DP)
  13. c语言中prime的作用,C语言判断素数prime
  14. poj2109 Power of Cryptography
  15. 【嵌入式--伺服电机】(11)MIT无刷电机FOC硬件电路分析
  16. android 自定义唤醒词,如何在Android上获得语音唤醒
  17. Vue实例--音乐播放器:歌单数据接口分析
  18. nodejs中解决发出响应数据正常但是浏览器没有正确显示的问题
  19. PHP苹果支付以及事件通知-周期订阅实现
  20. java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

热门文章

  1. 如何写好标题,才能轻松上简书首页?
  2. 清爽登录界面html,基于css3实现扁平简洁清爽的登录注册页面代码
  3. vs2013 没有ef mysql_vs2013 EF Mysql
  4. 流放之路进传送门显示服务器断线,资讯:特别改动 优化组队经验获取 降低断图风险...
  5. share my tools With Xcode
  6. Typed DataSet的批量操作优化
  7. 在ASP.Net中实现RSA加密
  8. 官网下的 demoMUI,a链接失效和点击事件失效
  9. Java基础练习之流程控制(四)
  10. Gstreamer衬垫(pad)支持的媒体类型(三)