Spring boot 我是否可以使用消息队列位于我的应用程序和外部系统之间,以跟踪所有发出的消息?

Spring boot 我是否可以使用消息队列位于我的应用程序和外部系统之间,以跟踪所有发出的消息?,spring-boot,apache-kafka,rabbitmq,activemq,message-queue,Spring Boot,Apache Kafka,Rabbitmq,Activemq,Message Queue,我有一个spring boot应用程序,可以进行一些处理。此应用程序发送请求,与不同的应用程序通信。这些要求包括 HL7消息发送到外部系统的tcp/ip套接字 对其他API的http请求(不是每个API调用,而是选定的API调用) json数据到文件系统 我需要一种机制来存储所有输出的内容并跟踪它们,这样,如果我需要重新发送某些内容,我应该能够手动重新发送它们。同时也要确保发送的东西最终到达端点 我看了一下消息代理/消息队列——RabbitMQ、Kafka、ActiveMQ。这些我都没用过。

我有一个spring boot应用程序,可以进行一些处理。此应用程序发送请求,与不同的应用程序通信。这些要求包括

  • HL7消息发送到外部系统的tcp/ip套接字
  • 对其他API的http请求(不是每个API调用,而是选定的API调用)
  • json数据到文件系统
我需要一种机制来存储所有输出的内容并跟踪它们,这样,如果我需要重新发送某些内容,我应该能够手动重新发送它们。同时也要确保发送的东西最终到达端点

我看了一下消息代理/消息队列——RabbitMQ、Kafka、ActiveMQ。这些我都没用过。据我所知,这些排队框架提供了发布/订阅机制、直接交换模式

我的问题

  • 在消息传递环境中,我可以向代理发送消息,然后让代理发送到外部端点吗
  • 消费者是否连接到MQ或订阅MQ以接收消息?经纪人不能直接向接收者发送消息吗
  • 如果接收器是restful API,那么它是否可以在不编写任何特定于MQ的使用者代码的情况下接收请求?我不能要求外部系统编写一些消费代码
我最初认为我可以为此使用消息代理。但后来经过分析得出结论,消息代理不适合我的情况。我的假设正确吗

替代解决方案,
为系统发出的每个请求/消息向数据库添加一个条目以及有效负载。构建可用于跟踪这些请求的UI,并在UI中提供可用于将这些消息重新发送到端点的重发选项。查看每天发送的大约200000个请求/消息。

如果您的唯一需求是重新发送失败的消息,那么您可以使用简单的消息队列(如RabbitMQ)对失败的消息进行排队。然后开发一个单独的服务来订阅上面的队列并重新发送它接收到的消息

如果你希望通过更多的需求来扩展你的服务,那么就选择卡夫卡吧。 但是不管您选择了什么消息代理,都要这样设计它

  • 处理器服务(可以是您现有的spring boot应用程序)-这将进行处理,结果将发布到message broker
  • Kafka/RabitMQ/ZeroMQ-这只是一个保存消息的队列
  • 集成服务-这将订阅上面的消息队列并发送它收到的任何请求。失败的消息可以重新排队到Kafka,以便稍后处理
  • 这样,您就不必要求第三方来实现您的逻辑,您将对集成拥有更多的控制权