使用 Apache Camel and/or ActiveMQ 在 Java 引导集成微服务中实现持久重新交付
Implementing a persistent redelivery in a Java Boot integration microservice using Apache Camel and/or ActiveMQ
我想开发一个小型集成微服务,实现两个现有系统之间的通信。
系统 A 有一个 Apache Kafka 主题生成和使用消息。
系统 B 有一个 REST API 并且能够调用 REST API 回调。
我正在尝试开发的解决方案必须能够与每个系统通信、转换消息并将其传送到另一个系统(同时进行大量日志记录等)。消息数量和消息大小小。性能不会成为问题。
我选择的堆栈是 Spring Boot + Apache Camel 用于路由 + ELK 用于日志记录(+ 模板引擎等,这不是真正相关的)。
我主要关心的是保证交付的要求。根据我的阅读,Camel 将消息存储在内存中,这意味着 restarting/updating 我的微服务可能会丢失一些不可接受的数据。
实施保送的相关行业标准是什么?
我正在研究 ActiveMQ,但不确定我是否需要带上大炮,因为解决方案很小,数据量也很小。不过我不太反对这个想法。
我想我的问题是
- 在将第 3 方 Kafka 与第 3 方 REST 系统集成时,实现持续保证交付的优雅方法是什么。
- 为了一个小型微服务而引入整个消息代理是否太多了?
简而言之——不,没有 'elegant' 方法来实现它。 Kafka确实做不到原来意义上的guaranteed delivery。 Kafka 解决方案通常依赖于所有端点都支持多次重放相同数据的能力(或者消费者能够跟踪已经交付的内容并删除重复的消息)。与 REST 相同——REST 端点(和一般的 HTTP,不支持保证交付。
这是一个主观问题,但我会尽量客观地回答——ActiveMQ 的占用空间比 Kafka 小。如果您使用的是 Camel,则可以轻松地将小型 ActiveMQ 代理与 Camel 路由放在一起。这是一种常见的架构——自 Camel 诞生以来就一直存在。或者,如果消息量很低,独立的 ActiveMQ 代理就像 运行 单个容器或 Java 进程一样简单。
“Kafka 到队列消息”是一种常见的模式,可以为其他系统提供有保证的传递。这将网络链接的错误处理和重试集中到排队的消息传递代理。然后,您的骆驼路线将从队列中读取。您可以使用 JMS 本地事务安全地将队列到一个 REST 端点视为类似 XA 的保证交付。
我想开发一个小型集成微服务,实现两个现有系统之间的通信。
系统 A 有一个 Apache Kafka 主题生成和使用消息。
系统 B 有一个 REST API 并且能够调用 REST API 回调。
我正在尝试开发的解决方案必须能够与每个系统通信、转换消息并将其传送到另一个系统(同时进行大量日志记录等)。消息数量和消息大小小。性能不会成为问题。
我选择的堆栈是 Spring Boot + Apache Camel 用于路由 + ELK 用于日志记录(+ 模板引擎等,这不是真正相关的)。
我主要关心的是保证交付的要求。根据我的阅读,Camel 将消息存储在内存中,这意味着 restarting/updating 我的微服务可能会丢失一些不可接受的数据。
实施保送的相关行业标准是什么? 我正在研究 ActiveMQ,但不确定我是否需要带上大炮,因为解决方案很小,数据量也很小。不过我不太反对这个想法。
我想我的问题是
- 在将第 3 方 Kafka 与第 3 方 REST 系统集成时,实现持续保证交付的优雅方法是什么。
- 为了一个小型微服务而引入整个消息代理是否太多了?
简而言之——不,没有 'elegant' 方法来实现它。 Kafka确实做不到原来意义上的guaranteed delivery。 Kafka 解决方案通常依赖于所有端点都支持多次重放相同数据的能力(或者消费者能够跟踪已经交付的内容并删除重复的消息)。与 REST 相同——REST 端点(和一般的 HTTP,不支持保证交付。
这是一个主观问题,但我会尽量客观地回答——ActiveMQ 的占用空间比 Kafka 小。如果您使用的是 Camel,则可以轻松地将小型 ActiveMQ 代理与 Camel 路由放在一起。这是一种常见的架构——自 Camel 诞生以来就一直存在。或者,如果消息量很低,独立的 ActiveMQ 代理就像 运行 单个容器或 Java 进程一样简单。
“Kafka 到队列消息”是一种常见的模式,可以为其他系统提供有保证的传递。这将网络链接的错误处理和重试集中到排队的消息传递代理。然后,您的骆驼路线将从队列中读取。您可以使用 JMS 本地事务安全地将队列到一个 REST 端点视为类似 XA 的保证交付。