使用Apache Camel发布/订阅模式

发布/订阅是一种简单的消息传递模式,其中,发布者将消息发送到某个频道,而无需知道谁将接收消息。 然后,通道负责将消息的副本传递给每个订户。 此消息传递模型允许创建松耦合和可伸缩的系统。

这是一种非常常见的消息传递模式,有许多方法可以在Apache Camel中创建一种pub-sub。 但是请记住,它们都是不同的并且具有不同的特征。 从最简单到更复杂,这是一个列表:

  • 组播 –仅与静态的订阅者列表一起使用,可以并行地将消息传递给订阅者,如果其中一个订阅者发生故障,则停止或异常继续。
  • 收件人列表 –与多播类似,但是允许在运行时(例如,在消息头中)定义订户。
  • SEDA –该组件使用BlockingQueue提供异步SEDA行为。 设置multipleConsumers选项后,可以将其用于异步发布订阅消息。 如果没有按时使用邮件,它还可以阻止已满的邮件,设置队列大小或超时发布。
  • VM –与SEDA相同,但是可以跨多个CamelContext,只要它们在同一JMV中即可。 这是在Web容器中的Web应用程序之间或OSGI容器中的捆绑软件之间发送消息的一种很好的机制。
  • Spring-redis – Redis具有pubsub功能,可以将消息发布到多个接收者。 可以通过名称或使用模式匹配来订阅频道。 当使用模式匹配时,订户将从所有与模式匹配的信道接收消息。 请记住,在这种情况下,如果多个模式与发送消息的同一通道匹配,则可能会收到一条以上的消息。
  • JMS(ActiveMQ) –这可能是进行发布订阅(包括持久订阅的最佳方法。 有关完整列表功能检查ActiveMQ的网站。
  • Amazon SNS / SQS –如果您需要一个真正可扩展且可靠的解决方案,那么SNS是必经之路。 为SQS队列订阅该主题,将其变成持久订阅者,并允许以后轮询消息。 在这种情况下要记住的重要一点是,它不是很快,最重要的是,Amazon不保证您的消息按FIFO顺序排列。

也有不那么流行的Camel组件提供发布-订阅消息传递模型:

  • websocket –它使用Eclipse Jetty Server,并且可以将消息发送到当前连接的所有客户端。
  • hazelcast – SEDA实现了工作队列,以支持异步SEDA体系结构。
  • guava-eventbus –骆驼和Google Guava EventBus基础架构之间的集成桥。
  • spring-event –提供对Spring ApplicationEvent对象的访问。
  • eventadmin –在OSGi环境上接收OSGI事件。
  • xmpp –实现XMPP(Jabber)传输。 在聊天室中发布消息也是pub-sub;)
  • mqtt –与兼容MQTT的消息代理进行通信。
  • amqp –使用Qpid项目的客户端API支持AMQP协议。
  • javaspace –一种用于处理任何与JavaSpace兼容的实现的传输。

您可以命名其他任何方式来进行发布-订阅吗?

参考:来自OFBIZian博客的JCG合作伙伴 Bilgin Ibryam的Apache Camel发布/订阅模式 。

翻译自: https://www.javacodegeeks.com/2013/05/publishsubscribe-pattern-with-apache-camel.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端(H5)弹框组件--简单--实用--不依赖jQuery

俗话说的好,框架是服务与大家的,包含的功能比较多,代码多。在现在追求速度的年代。应该根据自己的需求去封装自己所需要的组件。 下边就给大家介绍一下自己封装的一个小弹框组件,不依赖与jQuery,代码少,适…

c++ for循环 流程图_python 零基础必知--条件控制与循环语句

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者:somenzz如果没有 if 语句和循环语句,请问你怎么编程?Python 中的条件控制和循环语句都非常简单&…

前端总结·基础篇·CSS(二)视觉

前端总结系列 前端总结基础篇CSS(一)布局前端总结基础篇CSS(二)视觉前端总结基础篇CSS(三)补充前端总结基础篇JS(一)原型、原型链、构造函数和字符串(String)…

【kindle笔记】之 《浪潮之巅》- 2018-1-

《浪潮之巅》 这本书推荐自最爱的政治课老师。 政治课老师张巍老师。我会一直记得你的。 以这样的身份来到这个学校,他人的质疑,自己的忐忑,老板的不公。犹犹豫豫谨小慎微地前进。 第一次听到这样的话是从您口中: 在座的诸位&…

Secure CRT 自动记录日志log配置

SecureCRT8.0的下载地址下载地址: 链接:https://pan.baidu.com/s/1i5q09qH 密码:4pa2 配置自动log操作如下: 1.options ---> Session Options 2. 设置log 文件属性 点击 日志 ,在选项框中 Log file name中填入路径和…

禁用mysql的sleep函数_MySQL的sleep函数的特殊特现象

MySQL中的系统函数sleep,实际应用的场景不多,一般用来做实验测试,昨天在测试的时候,意外发现sleep函数的一个特殊现象。如果在查询语句中使用sleep函数,那么休眠的时间跟返回的记录有关。如下测试所示:mysq…

amoeba mysql读写分离_Mysql 实现读写分离的详细教程(amoeba)

Mysql 实现读写分离的详细教程(amoeba)发布时间:2018-08-17作者:laosun阅读(2220)继上篇文章,mysql实现主从配置之后的读写分离实现方式,文章地址。amoeba是盛大架构师陈思儒独立完成,除此之外还有很多中间件&#xff…

十道海量数据处理面试题与十个方法大总结

1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G64320G,远远大于内存限制的4G。所以不可能将其完全加载…

Spring集成文件轮询和测试

我最近实施了一个小项目,在该项目中,我们必须轮询文件夹中的新文件,然后在文件内容上触发服务流。 Spring Integration非常适合此要求,因为它带有一个通道适配器 ,该适配器可以扫描文件夹中的新文件,然后通…

Spark参数配置总结

转载于:https://www.cnblogs.com/lz3018/p/8128017.html

eclipse mysql生成实体类_Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)...

一、插件安装1.下载插件:http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R200810311334.zip2.解压压缩包分别将其中的features和plugins放到Eclipse安装目录下对应的这2个文件里,重启Eclipse使其生效3.随便建个project&…

一些小技巧-重构

用box-shadow制造浮雕效果用box-shadow做简单的背景修饰长页面背景图不够用...... 01 用box-shadow制造浮雕效果 demo示例: src"http://demo.zhangruojun.com/static/demo/demo001/" frameborder"0" width"414" height"650&qu…

VM虚拟机显示不能铺满问题

关于使用虚拟机(VMware)时桌面显示不能铺满整个窗口时的设置操作: 步骤:虚拟机菜单下的:编辑-->首选项-->显示(如下图) 可以根据自己需求设置全屏下面的三个选项,确定后如果不…

Weex系列-项目工程

转载于:https://www.cnblogs.com/hacjy/p/8136460.html

MySQL索引效率对比_mysql下普通索引和唯一索引的效率对比

今天在我的虚拟机中布置了环境,测试抓图如下:抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致相同,而且如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引。谷歌一…

spring以及json,fastjson和jackson

(一) RestController 以及 RequestBody spring的这两个注解都需要使用对应的 message-converters 实现 pojo到字符串的转换, 需要配置实现了 GenericHttpMessageConverter 接口的实现类GenericHttpMessageConverter 父接口为HttpMessageConve…

turtle 函数 方法_学python第十一节:turtle深入 了解

学python第十一节:深入分析turtleTurtle是一个直观有趣的图形绘制函数。这节课对turtle的以下几点进行补充:在蟒蛇绘制代码中提到过import 库引用保留字的函数,是补充python程序功能的方式,使用2种编写格式: 第一种引用…

intellij idea中解决java.lang.VerifyError: Expecting a stackmap frame at branch target的方法

【实习第三周,被生活逼成了全栈hhhh从开发写到测试】 报错如下: 经过查找各类资料博客,针对不同的情况有不同的解决办法:1. java源代码是用jdk1.6下开发的,后来环境上替换安装了jdk1.7编译运行。运行报错。我的错误不属…

ArrayList使用内存映射文件

介绍 内存中的计算由于负担得起的硬件而开始兴起,大多数数据保留在RAM中以满足延迟和吞吐量的目标,但是将数据保留在RAM中会增加垃圾收集器的开销,尤其是在您不预先分配的情况下。 因此,有效地我们需要一种无垃圾/无垃圾的方法来避…

JVM的内存区域划分(转载)

原文链接: http://www.cnblogs.com/dolphin0520/p/3613043.html JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如…