Apache Camel是一个流行的,成熟的开源集成库。 它实现了企业集成模式 ,这是在集成分布式系统时经常出现的一组模式。 过去,我写过很多关于Camel的文章, 包括为什么我比Spring Integration更喜欢它 , 路由引擎 如何 工作 , 如何在AWS SQS中使用JMS选择器, 等等 。

Camel还实现了197个连接器/适配器,用于与外部系统对话(转到源代码,components /目录并运行此命令:ls -lp components / | grep / | wc -l), github还有很多 ,您可以编写你自己很琐碎。 与其他集成库相比,这为Camel提供了更广泛的连接选项。

最近,我很幸运能够帮助使用Camel的一家知名的顶级电子零售商。 他们接受在线订单并使用事件驱动的体系结构处理它们,其中包括发布事件,例如“ order_received”,“ order_cancelled”,“ order_ready_to_ship”等。 这些事件由有兴趣参与订单处理流程的微服务来处理,并且由于存在适当的EDA而被松散耦合。

这种类型的零售业务的性质是非常季节性的。 而且在一年中的某些时段(节假日等),负载往往会增加几个数量级。 因此,能够在不中断的情况下进行扩展以满足这些季节性高峰至关重要。

幸运的是,由于他们是一群聪明人,他们使用Apache Camel进行集成,尤其是其中一些服务的实现。 每个订单都会生成很多事件,因此必须及时处理它们,并保持其余的负载。 为此的排队服务是Amazon SQS,而Camel为此提供了一个AWS SQS组件 。

对于标称负载,Camel可以很好地处理这些事件。 但是当队列变得更深时,骆驼在跟上时遇到了一些麻烦。 每分钟仅收到200条消息,这没有通过气味测试。 深入研究发现,AWS库使您可以垂直扩展规模, 从而增加连接数并按批处理消息传递方式 (最多10条批处理消息)。 批处理很有帮助,实现了Camel来处理批处理,但是它仍然不够快,每小时只有大约1万条消息。

进一步挖掘后,我们可以看到只有一个线程正在处理消息队列的轮询。 因此,我们决定使用SEDA队列 ,而不是使用与轮询队列的线程内联处理消息,以便我们可以从SQS中提取消息并快速转储到内存队列中,这样就可以启动下一个轮询:

from("amazon-sqs://order.queue").to("seda:incomingOrders");from("seda:incomingOrders").process(do our processing in another thread...);

这使我们能够使用暂存事件驱动的体系结构模式处理负载。 这一变化使我们的性能再次提高到每小时约4万条消息,但是我们谈论的是一个非常受欢迎的商务站点,因此仍不足以进行扩展以满足高峰期系统的需求。

因此,我们又看了一眼,想知道为什么不能同时进行多个线程/连接轮询? AWS库是考虑到这一点编写的,但是没有一种方法可以配置Camel以针对这种特定类型的终端节点执行此操作。 Camel可以对其他端点(JMS,SEDA等)执行此操作,但是为此我们需要在Camel SQS中进行一些小的更改。

这就是使用开源,社区风格的开发理念的美妙之处:代码是开放的,社区欢迎变化,现在Camel及其功能的未来用户可以从这种协作中受益。

因此,我们犯了一个补丁 ,允许您设置的SQS队列concurrentConsumers选项,将斜升用于连接和查询队列的线程数。 像这样:

from("amazon-sqs://order.queue?concurrentConsumers=50").to(.... processing here....)

有关更多信息,请参见camel-sqs上的文档 。 此更改将是Apache Camel 2.15.0发行版的一部分,该发行版将在接下来的几周内发布。

通过此设置,我们能够处理黑色星期五和网络星期一可能在站点上引发的所有负载,一次处理每小时超过150万条消息。

谢谢开源!

翻译自: https://www.javacodegeeks.com/2015/02/very-fast-camels-and-cloud-messaging.html

快速的骆驼和云消息传递相关推荐

  1. perl大骆驼和小骆驼_快速的骆驼和云消息传递

    perl大骆驼和小骆驼 Apache Camel是一个流行的,成熟的开源集成库. 它实现了企业集成模式 ,这是在集成分布式系统时经常出现的一组模式. 过去,我写过很多关于Camel的文章, 包括为什么 ...

  2. 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术

    简介:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术.学习内容涵盖云开发协同.云函数.云数据库.多媒体托管.前后端一体化框架等Serverless Web开发必备知识.希 ...

  3. 快速解决:阿里云ECS实例远程桌面连接 发生身份验证错误。要求的函数不受支持 !

    三步解决问题: 本地PC 远程桌面连接 阿里云ECS实例 失败 ? 报错: "发生身份验证错误.要求的函数不受支持" ? 一.问题截图描述: 二.3步解决问题: 1. 网页版 · ...

  4. [云开发3]-将问卷调查Demo应用快速部署到SAP云平台

    快速部署到SAP云平台Cloud Foundry 阅读这篇blog大约需要5分钟 在Demo原型开发后的第一时间部署到云平台. Be slow to promise and quick to perf ...

  5. PHP云盘网盘系统源码+快速对接多家云存储+VIP付费下载功能

    源码介绍: 快速对接多家云存储,支持腾讯云COS.阿里云OSS.自建远程服务器,当然,还有本地存储. 带3种主题和2种下载界面主题. 图片.音频.视频.文本. 移动端全站响应式布局. 文件.目录分享系 ...

  6. 送福利 手把手教你快速配置腾讯云 Linux 服务器

    一.在使用云服务器之前,需要注册腾讯云账号,并完成实名认证. 二.买域名及认证 三.访问 腾讯云云服务器介绍页面,快速配置选型 选择云服务器所在地域及可用区 根据以下选择地域,对于快速配置的云服务器可 ...

  7. .net android 推送消息,android – FCM(Firebase云消息传递)推送通知与Asp.Net

    Firebase云消息传递的C#服务器端代码 using System; using System.Collections.Generic; using System.IO; using System ...

  8. 快速集成华为AGC云存储服务-Web

    华为AppGallery Connect提供了一个云存储(CloudStorage)的服务,号称提供了一个便捷的云端存储服务,应用开发者使用的时候,可以不用关注服务器的部署,直接使用就行. 这个服务近 ...

  9. PHP云盘网盘系统源码+快速对接多家云存储+全新一键安装版

    介绍: 快速对接多家云存储,支持七牛.又拍云.阿里云OSS.AWS S3.Onedrive.自建远程服务器,当然,还有本地存储. 自定义主题配色. 图片.音频.视频.文本.Markdown.Ofiic ...

最新文章

  1. OpenCV视频分析背景提取与前景提取
  2. AxonFramework,快照(Snapshotting)
  3. datepick二格式 化时间_考研经验分享(三)英语二作文模板
  4. Codeforces 698D Limak and Shooting Points (搜索)
  5. C#打开文件对话框和文件夹对话框
  6. Android开源源码推荐(一)
  7. HDOJ HDU 1849 Rabbit and Grass ACM 1849 IN HDU
  8. 停滞数年后,ElasticJob 携首个 Apache 版本 3.0.0-alpha 回归!
  9. js 正则中冒号代表什么_是否还在疑惑Vue.js中组件的data为什么是函数类型而不是对象类型...
  10. 【归纳】C语言基础知识回顾
  11. 三菱GXWorks2 程序仿真功能
  12. Java开源 J2EE框架(一)
  13. Matter over Wi-Fi: Raspberry Pi 4开发环境设置
  14. USB Still Image Capture设备类
  15. jquery html() 获取自己
  16. input获取焦点vue_在Vue中输入框自动获取焦点的三种方式
  17. 单片机小白学步系列(八) 用面包板搭建实验电路
  18. unexpected character `w‘ in type specifier 解决方案
  19. 哈代-温伯格平衡定律(The Hardy-Weinberg Equilibrium)
  20. python通过路径找文件_Python寻找路径和查找文件路径的示例

热门文章

  1. java中求5的阶乘
  2. hibernate正向生成数据库表以及配置——Student.hbm.xml
  3. sql serve基础
  4. 2015蓝桥杯省赛---java---C---1(隔行变色)
  5. PHP WEB程序设计信息表,PHP WEB程序设计
  6. browserquest php安装,请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker...
  7. java模式匹配_用Java匹配模式
  8. selenium自动化测试_使用Selenium自动化测试处理多个浏览器选项卡
  9. azure 部署java_jClarity:在Azure上升级到Java
  10. java设计模式适配器模式_Java中的适配器设计模式