【问题标题】:spring boot in memory activemq内存中的spring boot activemq
【发布时间】:2018-11-23 10:08:13
【问题描述】:

我使用本指南制作了一个简单的 Spring 启动内存中 ActiveMQ 服务,该服务从休息控制器获取消息,然后将其传递给侦听器。然后侦听器进行一些处理,大约需要 40 秒,但我无法在处理完结果后检索结果。

https://github.com/TechPrimers/inmemory-spring-boot-activemq-example

到目前为止,一切都按预期工作,但我希望能够检索侦听器已处理的结果。

我正在考虑这样做的一种方法是创建另一个休息控制器,该控制器返回侦听器完成的任务的结果。并通过使用关系数据库来管理 ID 和消息。

但是,我宁愿使用内存中的所有内容,而不是处理数据库。

ActiveMQ 和/或 spring 是否有内置的东西来管理它?

【问题讨论】:

  • 应该能够return "hello there!" 或您的听众类/方法的任何有效结果。
  • @RandyCasburn 是的,但我想返回队列中处理的内容。所以我需要一个ID来检查状态并得到结果

标签: spring spring-boot activemq


【解决方案1】:

您所描述的内容在我看来就像request-reply pattern,这在企业集成场景中很常见。

假设工作的结果将很快被消耗,那么我建议您只需将结果放入另一条消息中并将该消息发送到“回复”队列。原始消息可以包含一个“相关 ID”,侦听器也可以在回复消息中使用它,以便将结果与请求相关联。

如果结果不会很快被消耗,那么数据库可能会更好,因为消息代理不像数据库那样设计为数据存储库。此外,如果您走这条路,那么内存中的嵌入式数据库可能会很适合您。

【讨论】:

  • 是的,请求-回复模式正是我想要做的。我确实读过它。现在我坚持在 Spring 控制器中设置相关 ID。 jmsTemplate 没有这样做的方法。我会搜索看看是否可以找到任何示例。
  • 您应该能够使用 JMS API 在消息上设置相关 ID。见javax.jms.Message.setJMSCorrectionalID(String)
猜你喜欢
  • 1970-01-01
  • 2018-01-31
  • 2020-06-23
  • 1970-01-01
  • 2018-03-17
  • 2020-12-29
  • 2018-10-14
  • 2015-07-27
  • 2016-03-23
相关资源
最近更新 更多