发布/订阅是一种简单的消息传递模式,其中,发布者将消息发送到某个频道,而无需知道谁将接收消息。 然后,通道负责将消息的副本传递给每个订户。 此消息传递模型允许创建松耦合和可伸缩的系统。
这是一种非常常见的消息传递模式,有许多方法可以在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