我可以在我的应用程序和外部系统之间使用消息队列来跟踪发出的所有消息吗?
Can I use a Message queue to sit between my application and external system to track everything which goes out?
我有一个 spring-boot 应用程序可以进行一些处理。这个应用程序发出请求,与不同的应用程序通信。要求包括
- HL7 消息到外部系统的 tcp/ip 套接字。
- 对其他 API 的 http 请求(不是每个 API 调用而是选定的)
- json 数据到文件系统
我需要一种机制来存储所有发出的信息并对其进行跟踪,这样如果我需要重新发送某些内容,我应该能够手动重新发送它们。还要确保发出的东西最终到达端点。
我查看了消息 brokers/Message 队列 - RabbitMQ、Kafka、ActiveMQ。我没有使用过这些。我理解的这些队列框架提供了 pub/sub 机制,直接交换模式。
我的问题
- 在消息环境中,我可以将消息发送到代理,然后让代理发送到外部端点吗?
- 消费者是否连接到 MQ 或订阅它以接收消息?代理不能直接向接收者推送消息吗?
- 如果接收方是 restful API,它是否可以在不编写任何 MQ 特定消费者代码的情况下直接接收请求?我不能要求外部系统编写一些消费者代码。
我最初假设我可以为此目的使用消息代理。但后来分析得出结论,消息代理不适合我的情况。我的假设正确吗?
备用解决方案,
向数据库添加一个条目以及每个从系统中发出的 request/message 的有效负载。构建一个 UI 可用于跟踪这些请求,并在 UI 中提供一个重新发送选项,可用于将这些消息重新发送到端点。每天大约发送 200000 requests/messages。
如果您的唯一要求是重新发送失败的消息,您可以使用像 RabbitMQ 这样的简单消息队列来对失败的消息进行排队。然后开发一个单独的服务来订阅上面的队列,并重新发送它收到的消息。
如果您希望根据更多需求发展您的服务,那么请选择 Kafka。
但是无论您选择什么消息代理,都应该这样设计。
- 处理器服务(可以是您现有的 spring 启动应用程序)- 这将处理并将结果发布到消息代理。
- Kafka/RabitMQ/ZeroMQ - 这只是一个保存您的消息的队列
- 集成服务 - 这将订阅上述消息队列并发送它收到的任何请求。失败的消息可以 re-queued 到 Kafka 以便稍后处理。
这样一来,您就不必要求第 3 方来实现您的逻辑,并且您可以更好地控制集成。
我有一个 spring-boot 应用程序可以进行一些处理。这个应用程序发出请求,与不同的应用程序通信。要求包括
- HL7 消息到外部系统的 tcp/ip 套接字。
- 对其他 API 的 http 请求(不是每个 API 调用而是选定的)
- json 数据到文件系统
我需要一种机制来存储所有发出的信息并对其进行跟踪,这样如果我需要重新发送某些内容,我应该能够手动重新发送它们。还要确保发出的东西最终到达端点。
我查看了消息 brokers/Message 队列 - RabbitMQ、Kafka、ActiveMQ。我没有使用过这些。我理解的这些队列框架提供了 pub/sub 机制,直接交换模式。
我的问题
- 在消息环境中,我可以将消息发送到代理,然后让代理发送到外部端点吗?
- 消费者是否连接到 MQ 或订阅它以接收消息?代理不能直接向接收者推送消息吗?
- 如果接收方是 restful API,它是否可以在不编写任何 MQ 特定消费者代码的情况下直接接收请求?我不能要求外部系统编写一些消费者代码。
我最初假设我可以为此目的使用消息代理。但后来分析得出结论,消息代理不适合我的情况。我的假设正确吗?
备用解决方案, 向数据库添加一个条目以及每个从系统中发出的 request/message 的有效负载。构建一个 UI 可用于跟踪这些请求,并在 UI 中提供一个重新发送选项,可用于将这些消息重新发送到端点。每天大约发送 200000 requests/messages。
如果您的唯一要求是重新发送失败的消息,您可以使用像 RabbitMQ 这样的简单消息队列来对失败的消息进行排队。然后开发一个单独的服务来订阅上面的队列,并重新发送它收到的消息。
如果您希望根据更多需求发展您的服务,那么请选择 Kafka。 但是无论您选择什么消息代理,都应该这样设计。
- 处理器服务(可以是您现有的 spring 启动应用程序)- 这将处理并将结果发布到消息代理。
- Kafka/RabitMQ/ZeroMQ - 这只是一个保存您的消息的队列
- 集成服务 - 这将订阅上述消息队列并发送它收到的任何请求。失败的消息可以 re-queued 到 Kafka 以便稍后处理。
这样一来,您就不必要求第 3 方来实现您的逻辑,并且您可以更好地控制集成。